Jay*_*nth 5 android broadcastreceiver android-8.0-oreo android-8.1-oreo
我正在研究一个记录来电和拨出电话的项目,但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>
Run Code Online (Sandbox Code Playgroud)
在Oreo中有一些广播限制,它不再支持在app清单中为隐式广播注册广播接收器.而NEW_OUTGOING_CALL就是其中之一,请阅读此处
您可以将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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
在清单中,
<receiver android:name=".StateReceiver">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</receiver>
Run Code Online (Sandbox Code Playgroud)
您还需要添加并检查READ_PHONE_STATE权限
| 归档时间: |
|
| 查看次数: |
3517 次 |
| 最近记录: |