我有一个正在听电话的服务。当手机闲置时,我想向我的活动发送一条消息。看起来我有两个选择来实现这一目标。 BroadcastReceiver并绑定到Service。 BroadcastReceiver看起来更简单,所以我尝试了以下测试。
在我的活动中:
@Override
protected void onStart() {
super.onStart();
IntentFilter filter = new IntentFilter("MyAction");
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "Yay.......");
abortBroadcast();
}
}, filter);
}
在我正在侦听事件的服务中,当我检测到我想要的事件时:
Intent localIntent = new Intent(_context, MainActivity.class);
intent.setAction("MyAction");
_context.sendOrderedBroadcast(localIntent, null);
在我的测试中,在我看到与调试器一起发送广播之后,永远不会调用onReceive()方法。我错过了什么?另外,BroadcastReceiver是本地服务与Activity通信的最简单方法吗?
答案 0 :(得分:4)
我认为我在初始测试案例中遇到了一些问题。 1.当我在我的服务中创建我的意图时,它应该以“动作”作为参数。 2.我相信我需要在我的清单中添加intent过滤器。
我现在的工作示例是:
的活动:
startService(intent);
IntentFilter filter = new IntentFilter(PhoneListeningService.PHONE_IDLE);
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "Yay.......");
}
}, filter);
清单:
<activity android:name=".MainActivity" android:screenOrientation="portrait" >
<intent-filter>
<action android:name="com.ncc.PhoneListeningService.action.PHONE_IDLE" />
</intent-filter>
</activity>
服务:
为命名的“action”声明公共常量并广播意图。
public static final String PHONE_IDLE = "com.ncc.PhoneListeningService.action.PHONE_IDLE";
...我的听众检测到电话闲置:
Intent intent = new Intent(PHONE_IDLE);
sendBroadcast(intent);