动态注册广播接收器 [英] Dynamically registering a broadcast receiver

查看:296
本文介绍了动态注册广播接收器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I registered my broadcast receiver like this(given below) in the manifest file. its working fine.

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

但是它始终保持注册状态.也就是说,每当电话启动时,我的应用程序就会启动.但是我只想一次.

But it stays registered through out. Ie whenever the phone is booting my application starts. But I want only one time.

我了解,如果它是动态注册的,我们可以实现.即我们可以在onPause()或onDestroy()方法中取消注册. 如果可能的话,请给我代码以完成此操作.我是这个新手.任何帮助,将不胜感激.谢谢.

I've understood that if it is registered dynamically, we can achieve this. i.e. we can unregister it in onPause() or onDestroy() method. If it's possible, please give me the code to do that. I am a newbie in this. Any help would be appreciated. Thank you.

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

I tried the following code, but it was of no use:

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. 创建一个意图过滤器. IntentFilter intentFilter = new IntentFilter(CUSTOM_INTENT)
  2. 创建广播收件人 接收方接收者=新的接收方(),其中接收方类扩展了广播接收方类
  3. 使用registerReceiver()通过以下方式注册BroadcastReceiver:

  1. Create a Intent Filter. IntentFilter intentFilter = new IntentFilter(CUSTOM_INTENT)
  2. Create a Broadcast Reciever Receiver receiver = new Receiver() where Reciever class extends BroadcastReciever Class
  3. Register BroadcastReceiver using registerReceiver() by :

LocalBroadcastManager:用于在同一应用程序内接收本地意图.

LocalBroadcastManager : For Recieving local intents i.e within the same application.

上下文:还用于接收远程意图.

Context : For Recieving remote intents also .

调用unRegisterReceiver()取消注册BroadcastReceiver

Call unRegisterReceiver() to unregister BroadcastReceiver

有关更多详细信息,请参考本教程.源代码:创建简单的动态接收器

Refer this tutorial for more details & source code :Create Simple Dynamic Recievers

这篇关于动态注册广播接收器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆