2012-03-23 75 views
0

我有服务,必须通过BradcastReceiver与活动(MyActivity)进行通信。这是广播接收器声明intosame活动,以便:Android:活动和服务通信

private class MessaggiReceiver extends BroadcastReceiver { 
     public static final String ACTION_RELOAD = "it.android.dev.thecode.ACTION_RELOAD"; 
     @Override 
     public void onReceive(Context arg0, Intent intent) { 
      if(intent.getAction().equals(ACTION_RELOAD)){ 
       leggi_act; //Method of MyActivity 
      } 
     } 

    } 

但如何必须申报入清单包含MyActivity内brodcast?我用这个代码it.android.dev.thecode.MyActivity.MessaggiReceiver

<receiver android:name="it.android.dev.thecode.MyActivity.MessaggiReceiver"> 
      <intent-filter> 
       <action android:name="it.android.dev.thecode.ACTION_RELOAD"></action> 
      </intent-filter> 
</receiver> 

但其实是错误,然后我用这个代码it.android.dev.thecode.myactivity $ MessaggiReceiver

<receiver android:name="it.android.dev.thecode.MyActivity$MessaggiReceiver"> 
       <intent-filter> 
        <action android:name="it.android.dev.thecode.ACTION_RELOAD"></action> 
       </intent-filter> 
    </receiver> 

谢谢

+0

如果你在清单中声明它,那么实现它的类必须是可见的,即不是'private'。把它放在一个单独的文件中,并将课程设置为“public”。 – zapl 2012-03-23 23:02:44

回答

1

您不需要在清单中注册广播接收器,而是通过代码在您的活动的onResume中注册它。不要忘记在onPause注销以避免任何泄漏。

@Override 
public void onResume() { 
    registerReceiver(mMessageReceiver, 
     new IntentFilter("it.android.dev.thecode.ACTION_RELOAD")); 
} 

@Override 
public void onPause() { 
    unregisterReceiver(mMessageReceiver); 
} 

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
    Log.d("receiver", "Got broadcast: " + intent.getAction()); 
    } 
}; 
+0

我的广播必须始终工作,而不是将不注册接收器代码插入onPause? – MimmoG 2012-03-23 21:56:22

+0

当你没有看到你的活动时,它当然不应该听任何广播,这就是它应该如何工作。如果你没有在onPause注销你的广播,该框架将会在logcat中发出警告,并强制放弃它的监听。所以最好在活动生命周期提前好好注意在onPause – waqaslam 2012-03-23 22:02:50

+0

好吧谢谢你:) – MimmoG 2012-03-23 22:08:49