通过BroadcastReceiver监听传入的呼叫,无需PhoneStateIntentReceiver或PhoneStateListener

CR *_*dar 8 android android-broadcast

有没有办法通过扩展BroadcastReceiver来监听传入的呼叫来监听OS的广播,而不使用PhoneStateIntentReceiver或PhoneStateListener.另请告诉我清单中的操作和权限是什么.

我已经尝试过如下但是它不适用于来电但是为传出工作

应用程序中唯一一个.java文件如下(app只有一个.java文件和一个清单文件)

package com.crsardar.media.audio;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;

public class IncommingCallReceiverCRS extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.e("Chitta : ", "Its working");          
    }
}
Run Code Online (Sandbox Code Playgroud)

表现

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.crsardar.media.audio"
      android:versionCode="1"
      android:versionName="1.0">
  <application android:icon="@drawable/icon" android:label="@string/app_name">

    <receiver android:name="IncommingCallReceiverCRS" android:enabled="true"> 
        <intent-filter>
            <!--action android:name="android.intent.action.NEW_OUTGOING_CALL"/-->
            <action  android:name="android.intent.action.ANSWER" >
            <category  android:name="android.intent.category.DEFAULT" /> 
        </intent-filter>
    </receiver>

  </application>

  <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
  <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  <uses-permission android:name="android.permission.RECORD_AUDIO"/>
</manifest>
Run Code Online (Sandbox Code Playgroud)

Muz*_*ant 9

您在清单中定义的操作不正确.这是一个Action Intent,可用于接听电话而不监听来电.

您可以使用两个侦听ACTION_PHONE_STATE_CHANGEDNEW_OUTGOING_CALL广播意图的广播接收器.

当有新的来电,呼叫应答或挂断时,将收到ACTION_PHONE_STATE_CHANGED(请参阅本意图收到的EXTRAs的文档).

当您的设备上有新的拨出电话时,将收到NEW_OUTGOING_CALL.

至于权限,我认为你在清单中得到了它(我假设RECORD_AUDIO权限用于你的应用程序中的其他东西)