以编程方式注册BroadcastReceivers以传递参数

时间:2016-08-31 10:50:13

标签: android android-broadcastreceiver

我有一个BroadcastReceiver,它会在启动完成后处理一些操作。但是,从我的onReceive方法调用的方法需要传递Activity

if (intent!!.action.equals(Intent.ACTION_BOOT_COMPLETED)) {
    Log.i(LOG_TAG, "onReceive (ACTION_BOOT_COMPLETED)");
    doSomeActionWithActivity(activity);
}

为了做到这一点,我为我的接收器创建了一个构造函数(我称之为BootReceiver

public BootReceiver(Activity activity) {
    this.activity = activity;
}

但是虽然这可以解决我的初始问题,但我从清单文件中收到错误:

  

.BootReceiver没有默认构造函数

要解决问题,我决定以编程方式注册和取消注册接收方,以便我可以将Activity传递给它。

onCreate()

Log.i(LOG_TAG, "Registering the receiver (BootReceiver)");
mReceiver = new BootReceiver(SplashActivity.this);
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_BOOT_COMPLETED);
registerReceiver(mReceiver, intentFilter);

而且,在onDestroy()

if (mReceiver != null) {
    Log.i(LOG_TAG, "Unregistering the receiver (BootReceiver)");
    unregisterReceiver(mReceiver);
}

再次测试我的应用后,我收到以下错误:

  

java.lang.IllegalArgumentException:组件类... BootReceiver不存在于...

指向我执行此操作的部分代码:

ComponentName receiver = new ComponentName(context, BootReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
        PackageManager.DONT_KILL_APP);

在上面的代码中,我想重启设备重启时设置的任何警报。另外,我使用this file from Remindly,一个开源应用程序作为指南/参考,用于上述代码。

重启警报并将Activity传递给BootReceiver课程的正确方法是什么。

1 个答案:

答案 0 :(得分:0)

如果您确定问题是由带参数的构造函数引起的,则可以在构造函数中使用setter而不是参数。