动态注册广播接收器

时间:2011-04-25 07:18:20

标签: android broadcastreceiver ondestroy

我在清单文件中注册了我的广播接收器(如下所示)。工作正常。

<receiver android:name="MyIntentReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BOOT_COMPLETED" />
        <category android:name="android.intent.category.HOME" />
    </intent-filter>
</receiver>

但是它一直在注册。即每当手机启动时,我的应用程序就会启动。但我只想要一次。

我明白如果它是动态注册的,我们可以做到这一点。即我们可以在onPause()或onDestroy()方法中取消注册它。 如果有可能,请给我代码来做到这一点。我是新手。任何帮助,将不胜感激。谢谢。

我尝试了以下代码,但没有用:

public class BeforeReboot extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.beforereboot);
    }
    private BroadcastReceiver myBroadcastReceiver =  new BroadcastReceiver()
    {
        @Override
        public void onReceive(Context context, Intent intent) {
            Intent startupBootIntent = new Intent(context,
                AfterRebootDynamic.class);//new class to be launched
            startupBootIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(startupBootIntent);
        }
    };

    public void onResume() {
        super.onResume();
        IntentFilter filter = new IntentFilter();
        filter.addAction("android.intent.action.BOOT_COMPLETED");
        filter.addCategory("android.intent.category.HOME");
        registerReceiver(myBroadcastReceiver, filter);
    }

    public void onPause() {
        super.onPause();
        unregisterReceiver(myBroadcastReceiver);
    }
}

1 个答案:

答案 0 :(得分:0)

步骤

  1. 创建一个意图过滤器。 IntentFilter intentFilter = new IntentFilter(CUSTOM_INTENT)
  2. 创建广播接收器 Receiver receiver =新的Receiver(),其中Reciever类扩展了BroadcastReciever Class
  3. 使用registerReceiver()通过以下方式注册BroadcastReceiver:

    LocalBroadcastManager:用于接收本地意图,即在同一应用程序中。

    上下文:也用于接收远程意图。

  4. 调用unRegisterReceiver()取消注册BroadcastReceiver

    请参阅本教程以获取更多详细信息。源代码:Create Simple Dynamic Recievers

相关问题