在 Oreo 中注册静态广播接收器
Registering Static Broadcast receiver in 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>
Oreo 中存在一些广播限制,它不再支持在应用程序清单中为隐式广播注册广播接收器。而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 权限
您可以在此处找到一些隐式广播异常 https://developer.android.com/guide/components/broadcast-exceptions,ACTION_NEW_OUTGOING_CALL 就是其中之一。
我在这里的类似回答:
我正在做一个记录来电和去电的项目, 但是对于 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>
Oreo 中存在一些广播限制,它不再支持在应用程序清单中为隐式广播注册广播接收器。而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 权限
您可以在此处找到一些隐式广播异常 https://developer.android.com/guide/components/broadcast-exceptions,ACTION_NEW_OUTGOING_CALL 就是其中之一。
我在这里的类似回答: