4

我需要(在运行时)为意图过滤器注册自定义广播接收器,可以在清单中描述为

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.HOME" />
    <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

并在用户通过按应用程序中的某个按钮(或
输入密码)退出应用程序时取消注册接收器。

使用代码注册的接收方

receiver_ = new MyReceiver();
filter_ = new IntentFilter(Intent.ACTION_MAIN);
filter_.addCategory(Intent.CATEGORY_HOME);
filter_.addCategory(Intent.CATEGORY_DEFAULT);
registerReceiver(receiver_, filter_);

不接收意图,不调用 onReceive() 函数。

我做错了什么,有没有可能解决这个问题?谢谢。

4

1 回答 1

4

ABroadcastReceiver仅由广播触发Intent(即:使用Intent发送sendBroadcast())。您描述的 Intent (ACTION=MAIN, CATEGORY=HOME) 不是广播Intent。那是Intent用来启动一个活动的(即:有人startActivity()Intent看起来像那样的一个调用)。

在我看来,您正在尝试创建主屏幕替换。如果那是你想要做的,你需要在你的清单中有一个Activitywith that 。<intent-filter>您不能动态注册/注销它。

如果您需要启用/禁用您的 HOME-Screen 替换,可以使用PackageManager. 看看setComponentEnabledSetting()这里:http: //developer.android.com/reference/android/content/pm/PackageManager.html

让我们知道你发现什么!

于 2012-10-10T21:42:35.423 回答