从本地服务向活动发送消息的最简单方法是什么

时间:2010-10-22 16:00:38

标签: android

我有一个正在听电话的服务。当手机闲置时,我想向我的活动发送一条消息。看起来我有两个选择来实现这一目标。 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通信的最简单方法吗?

1 个答案:

答案 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);