Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:活动和服务通信_Android_Service_Android Activity - Fatal编程技术网

Android:活动和服务通信

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

我的服务必须通过Bradcastereceiver与活动(MyActivity)进行沟通。此BroadcastReceiver是声明为同一活动,因此:

    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
。将它放在一个单独的文件中,并将类
公开