【发布时间】:2016-11-09 18:28:16
【问题描述】:
我正在使用广播接收器和后台服务。因此,当我的活动进行 onPause() 时,我会启动我的服务并且服务会发送一个广播。现在,我的广播接收器与我的服务属于同一类。我正在接到我的服务电话,但我无法接收广播信息。这是我一直在处理的代码.. [编辑]
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);
}
}
[编辑]关于activityNew类>
@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");
}
}
};
清单文件:[已编辑]
<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
在那之后我什么都没有得到..
我知道这可能不是最佳做法,我刚开始使用这些东西。 谢谢您的帮助。干杯!
【问题讨论】:
-
尝试替换 Intent broadcastIntent = new Intent(notifier); with Intent broadcastIntent = new Intent(activityNew.class);
-
@DeepanshuHarbola,它没有用。它要求两个论点...
-
Intent broadcastIntent = new Intent(this,activityNew.class);
-
IntentService在onHandleIntent()完成后自行停止。Context#sendBroadcast()是异步的,并且相对较慢,因此您的IntentService很可能在广播可以传送时已经死亡。此外,您还没有为您正在广播的操作注册接收器。也就是说,您尚未将notifier操作添加到IntentFilter。此外,无论如何,您还不清楚为什么要尝试向自己广播组件。直接调用本地方法即可。
标签: android service broadcastreceiver broadcast