我有一项正在监听电话的服务。当手机空闲时,我想向我的 Activity 发送一条消息。看起来我有两个选择来完成这个任务。 BroadcastReceiver 并绑定(bind)到服务。 BroadcastReceiver 看起来是一个更简单的机制,所以我尝试了以下测试。
在我的 Activity 中:
@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 通信的最简单方法吗?
最佳答案
我认为我在最初的测试用例中遇到了一些问题。 1.当我在我的服务中创建我的Intent时,它应该以“action”作为参数。 2. 我相信我需要将 Intent 过滤器添加到我的 list 中。
我现在的工作示例是:
Activity :
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);
list :
<activity android:name=".MainActivity" android:screenOrientation="portrait" >
<intent-filter>
<action android:name="com.ncc.PhoneListeningService.action.PHONE_IDLE" />
</intent-filter>
</activity>
服务:
为命名的“action”声明公共(public)常量并广播 Intent 。
public static final String PHONE_IDLE = "com.ncc.PhoneListeningService.action.PHONE_IDLE";
...我的监听器检测到手机空闲:
Intent intent = new Intent(PHONE_IDLE);
sendBroadcast(intent);
关于android - 从本地服务向 Activity 发送消息的最简单方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3998650/