我正在开发一个记录来电和拨出电话的项目, 但使用Oreo静态广播接收器(在清单中注册的广播接收器)不会被触发。 如果我使用上下文注册,一旦应用程序被杀,广播将不会被触发。
即使应用已关闭,我希望广播接收器能够正常工作。
有没有办法实现这个奥利奥?或任何其他替代方法来实现这一目标? 任何帮助将不胜感激。
我在清单中注册如下代码
<application ...
..
<receiver
android:name=".PhoneCallReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.NEW_OUTGOING_CALL" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</receiver>
</application>
答案 0 :(得分:6)
在奥利奥有一些广播限制,它不再支持在应用清单中为隐式广播注册广播接收器。而NEW_OUTGOING_CALL就是其中之一,请阅读here
您可以将PHONE_STATE操作用于您的目的,因为它尚未归类为隐式广播
public class StateReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// will trigger at incoming/outgoing call
try {
String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
String incomingNumber = intent.getStringExtra(TelephonyManager.EXTRA_INCOMING_NUMBER);
String outgoingNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
}
catch (Exception e){
e.printStackTrace();
}
}
}
在清单中,
<receiver android:name=".StateReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
您还需要添加并检查READ_PHONE_STATE权限
答案 1 :(得分:2)
您可以在https://developer.android.com/guide/components/broadcast-exceptions中找到一些隐式广播异常,其中ACTION_NEW_OUTGOING_CALL就在其中。