我正在使用广播接收器和后台服务。所以,当我的一个活动进入onPause()时,我开始服务并且服务发送一个广播。现在,我的广播接收器与我的服务属于同一类。我正在接听服务电话,但我无法收到广播信息。这是我一直在努力的代码.. [EDITED]
private String notifier = "ninja.ibtehaz.thenewproject.Activities.activityNew";
@Override
protected void onHandleIntent(Intent intent) {
boolean flag = ProjectApp.getInstance().isActivityVisible();
Log.e("rainbow", "onHandleIntent");
if (!flag) {
//start emergency activity
Log.e("rainbow", "starting activity");
Intent broadcastIntent = new Intent(notifier);
sendBroadcast(broadcastIntent);
}
}
[EDITED] on activityNew class>
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.e("rainbow", "In Method: Service started");
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
registerReceiver(receiver, filter);
}
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("rainbow", "In Method: onReceive");
if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
Log.e("rainbow","Screen went OFF");
}
if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
Log.e("rainbow","Screen went ON");
}
}
};
和清单文件:[EDITED]
<service android:name=".Activities.ServiceBackground">
</service>
<receiver
android:name=".Activities.ActivityEmergency"
android:theme="@android:style/Theme.NoDisplay">
</receiver>
这是我的logcat信息:
E/rainbow: onHandleIntent
E/rainbow: starting activity
之后我没有得到任何东西..
我知道这可能不是最好的做法,我刚开始使用这些东西。 谢谢您的帮助。干杯!
答案 0 :(得分:1)
您正在使用IntentFilter注册BroadcastReceiver,该IntentFilter仅包含Intent.ACTION_SCREEN_OFF和Intent.ACTION_SCREEN_ON,但没有 ninja.ibtehaz.thenewproject.Activities.activityNew 。这意味着当广播Intent.ACTION_SCREEN_OFF或Intent.ACTION_SCREEN_OFF时,此BroadcastReceiver可以仅被调用。
现在请注意你的sendBroadcast代码:
Intent broadcastIntent = new Intent(notifier);
sendBroadcast(broadcastIntent);
您正在播放一个动作“ninja.ibtehaz.thenewproject.Activities.activityNew”,它与您注册的BroadcastReceiver绑定的IntentFilter不匹配。
尝试使用这些代码:
IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(notifier);
registerReceiver(receiver, filter);
答案 1 :(得分:1)
广播限制:除少数例外,应用程序无法使用其清单来注册隐式广播。他们仍然可以在运行时注册这些广播,并且可以使用清单注册专门针对其应用的显式广播。
Android文档:https://developer.android.com/about/versions/oreo/background
尝试如下在动态注册而不是清单中动态注册。
BroadcastReceiver receiver = new NotificationReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_UPDATE_NOW);
context.registerReceiver(receiver, filter);
答案 2 :(得分:0)
您正在处理一个意图方法中注册您的接收器;-)这绝对不会起作用。
您必须提前注册您的接收器,例如。在onCreate()
方法中。