2010-10-22 85 views
2

我有一个正在倾听电话的服务。当手机进入空闲状态时,我想向我的活动发送消息。看起来我有两个选择来实现这一点。 BroadcastReceiver和绑定到服务。 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是本地服务与活动进行通信的最简单方式吗?

+0

做您的清单有适当的<意向过滤器>? – aprock 2010-10-22 17:13:23

回答

4

我想我在我的初始测试用例中遇到了一些问题。 1.当我在我的服务中创建我的意图时,它应该以“动作”作为参数。 2.我相信我需要将意图过滤器添加到我的清单。

我的工作示例现在是:

活动:

 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> 

服务:

申报命名 “行动” 众恒和广播的意图。

public static final String PHONE_IDLE = "com.ncc.PhoneListeningService.action.PHONE_IDLE"; 

...我的侦听器检测手机空闲:

  Intent intent = new Intent(PHONE_IDLE); 
      sendBroadcast(intent); 
+0

是否奏效?请放好后整个解决方案。 – 2011-07-27 21:03:02

+0

谢谢你简短的例子! @aaaaaaa:是的,它的工作原理。 – johndodo 2012-06-02 07:41:58

+0

...除了当活动停止时你需要取消注册接收器(),但这是一个小小的修复。 – johndodo 2012-06-02 07:58:22

相关问题