//这是我的代码
public class CallReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if(intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_OFFHOOK)){
showToast(context,"Call started...");
}
else if(intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_IDLE)){
showToast(context,"Call ended...");
}
else if(intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING)){
showToast(context,"Incoming call...");
}
}
void showToast(Context context,String message){
Toast toast=Toast.makeText(context,message,Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER,0,0);
toast.show();
}
}
///我已经在清单中注册了接收人
<receiver android:name=".CallReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
我在我的android应用程序中检测到传入和传出呼叫,此代码不适用于设备redmi和oppo,我希望该代码适用于所有设备。我不知道这是什么问题,请帮助我解决这个问题
答案 0 :(得分:0)
作为Android 8.0(API级别26)后台执行限制的一部分,面向API级别26或更高级别的应用程序无法再在其清单中为隐式广播注册广播接收器。您可以通过调用registerReceiver(new CallReceiver(), new IntentFilter().addAction("android.intent.action.PHONE_STATE"));
在“活动”中动态注册接收者
同样,这种方法的坏处是您的接收器仅在您的应用程序位于前台时才起作用。如果您关闭应用程序,则不会在后台触发任何广播。另外,如果您要查找通话记录数据,请参考this。