静态 BroadcastReceiver 未收到自定义意图
Static BroadcastReceiver not receiving custom intent
我的 BroadcastReceiver 似乎没有接收到它正在监听的意图。
我正在启动一个必须一直 运行 的后台服务。每当服务被终止时,它都会向我的 BroadcastReceiver 发送一个意图,然后重新启动服务。
这是我的服务 onDestroy
:
@Override
public void onDestroy() {
Log.i(TAG, "onDestroy");
sendBroadcast(new Intent("com.myapp.app.RESTART_SERVICE"));
stoptimertask();
super.onDestroy();
}
这是我的 BroadcastReceiver:
public class RestarterBroadcastReceiver extends BroadcastReceiver {
public RestarterBroadcastReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "Service stopped, restarting...");
context.startService(new Intent(context, ActivityRecognitionService.class));
}
}
Android 清单的重要部分:
<receiver
android:name=".RestarterBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.myapp.app.RESTART_SERVICE"/>
</intent-filter>
</receiver>
为什么我的 BroadcastReceiver 没有接收到意图?
您的问题可能是 Android Oreo 有效地禁止了隐式广播。解决此问题的最简单方法是使用显式广播而不是隐式广播。
尝试将服务的 onDestroy
代码更改为以下内容:
@Override
public void onDestroy() {
Log.i(TAG, "onDestroy");
// Here you're using an explicit intent instead of an implicit one
sendBroadcast(new Intent(getApplicationContext(), RestarterBroadcastReceiver.class));
stoptimertask();
super.onDestroy();
}
由于您不再使用 intent 操作,您还可以将 Android 清单更改为以下内容:
<receiver
android:name=".RestarterBroadcastReceiver"
android:enabled="true"
android:exported="true">
</receiver>
希望对您有所帮助!
我的 BroadcastReceiver 似乎没有接收到它正在监听的意图。
我正在启动一个必须一直 运行 的后台服务。每当服务被终止时,它都会向我的 BroadcastReceiver 发送一个意图,然后重新启动服务。
这是我的服务 onDestroy
:
@Override
public void onDestroy() {
Log.i(TAG, "onDestroy");
sendBroadcast(new Intent("com.myapp.app.RESTART_SERVICE"));
stoptimertask();
super.onDestroy();
}
这是我的 BroadcastReceiver:
public class RestarterBroadcastReceiver extends BroadcastReceiver {
public RestarterBroadcastReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "Service stopped, restarting...");
context.startService(new Intent(context, ActivityRecognitionService.class));
}
}
Android 清单的重要部分:
<receiver
android:name=".RestarterBroadcastReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.myapp.app.RESTART_SERVICE"/>
</intent-filter>
</receiver>
为什么我的 BroadcastReceiver 没有接收到意图?
您的问题可能是 Android Oreo 有效地禁止了隐式广播。解决此问题的最简单方法是使用显式广播而不是隐式广播。
尝试将服务的 onDestroy
代码更改为以下内容:
@Override
public void onDestroy() {
Log.i(TAG, "onDestroy");
// Here you're using an explicit intent instead of an implicit one
sendBroadcast(new Intent(getApplicationContext(), RestarterBroadcastReceiver.class));
stoptimertask();
super.onDestroy();
}
由于您不再使用 intent 操作,您还可以将 Android 清单更改为以下内容:
<receiver
android:name=".RestarterBroadcastReceiver"
android:enabled="true"
android:exported="true">
</receiver>
希望对您有所帮助!