我有一个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
课程的正确方法是什么。
答案 0 :(得分:0)
如果您确定问题是由带参数的构造函数引起的,则可以在构造函数中使用setter而不是参数。