1

「setComponentEnabledSetting()」に正しい属性を提供する際に問題があります - .class が見つからない、または存在しないという IllegalAttributeException が発生します。

レシーバーはアプリケーション マニフェストで宣言され、レシーバー ハンドラーは別のパッケージ (com.app.receivers) に格納されます。マニフェスト ファイルでは、name 属性は「.receivers.OnBoot」です。これまで、このセットアップに問題はありませんでした - レシーバーは動作していますが、今はユーザーがレシーバーを有効/無効にする機能を追加しようとしています。

ComponentName rec = new ComponentName("com.app.receivers", "OnBoot.class");
getPackageManager().setComponentEnabledSetting(rec, ....);

有効な ComponentName を取得するためにさまざまな方法を試しましたが、すべて失敗しました。setComponentEnabledSetting() が見つけられるように、このレシーバーを適切に参照するにはどうすればよいですか?

4

1 に答える 1

0

次のように試すのではなく、BroadcastReceiver完全なパッケージ名を含むクラス名を2番目のパラメーターとして使用するだけです。ComponentNameOnBoot.class

ComponentName rec = new ComponentName("com.app.receivers",
                                            "com.app.receivers.OnBoot");
getPackageManager().setComponentEnabledSetting(rec, ....);
于 2013-04-03T16:32:33.173 に答える