Android:活动和服务通信
我的服务必须通过Bradcastereceiver与活动(MyActivity)进行沟通。此BroadcastReceiver是声明为同一活动,因此:Android:活动和服务通信,android,service,android-activity,Android,Service,Android Activity,我的服务必须通过Bradcastereceiver与活动(MyActivity)进行沟通。此BroadcastReceiver是声明为同一活动,因此: private class MessaggiReceiver extends BroadcastReceiver { public static final String ACTION_RELOAD = "it.android.dev.thecode.ACTION_RELOAD"; @Override
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声明到清单中呢?我将此代码用于它。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>
<receiver android:name="it.android.dev.thecode.MyActivity$MessaggiReceiver">
<intent-filter>
<action android:name="it.android.dev.thecode.ACTION_RELOAD"></action>
</intent-filter>
</receiver>
但是我用了这个代码。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>
<receiver android:name="it.android.dev.thecode.MyActivity$MessaggiReceiver">
<intent-filter>
<action android:name="it.android.dev.thecode.ACTION_RELOAD"></action>
</intent-filter>
</receiver>
谢谢您不需要在清单中注册广播接收器,而是在活动的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());
}
};
我的广播必须始终有效,而不是在onPause中插入未注册的接收器代码?当您的活动不可见时,它当然也不应该收听任何广播,这就是它应该如何工作的。如果您没有在onPause中注销广播,框架将在logcat中抛出警告,并将强制放弃其侦听。因此,最好提前在onpausei中注销活动生命周期,如果您在清单中声明它,那么实现它的类必须是可见的,即非
private
。将它放在一个单独的文件中,并将类公开
。