Javaレシーバーを処理するためのコード)でregisterReceiverとunregisterReceiverを使用することは知っていますが、マニフェストに次のコードがあるとします。
<receiver Android:name=".headsetHook">
<intent-filter Android:priority="99999999999">
<action Android:name="Android.intent.action.ACTION_HEADSET_PLUG" />
</intent-filter>
</receiver>
Java code?このアクションが初めて発生したときに、登録を解除し、後でJavaで再登録します。
私がそれを明確にしたといいのですが、助けてくれてありがとう。
PackageManager
を使用して、マニフェストで宣言されたBroadcastReceiver
を有効/無効にすることができます。 Broadcast Receiver
が有効な場合にのみ発生します。
これを使用してコンポーネントを作成します
ComponentName component = new ComponentName(context, MyReceiver.class);
コンポーネントが有効か無効かを確認します
int status = context.getPackageManager().getComponentEnabledSetting(component);
if(status == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
Log.d("receiver is enabled");
} else if(status == PackageManager.COMPONENT_ENABLED_STATE_DISABLED) {
Log.d("receiver is disabled");
}
コンポーネントを有効/無効にします(あなたの場合はブロードキャストレシーバー)
//Disable
context.getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED , PackageManager.DONT_KILL_APP);
//Enable
context.getPackageManager().setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_ENABLED , PackageManager.DONT_KILL_APP);
Varunの回答に基づいて、私はこの実用的な方法を作成しました
private void unregisterReceiverFromManifest(Class<? extends BroadcastReceiver> clazz, final Context context) {
final ComponentName component = new ComponentName(context, clazz);
final int status = context.getPackageManager().getComponentEnabledSetting(component);
if(status == PackageManager.COMPONENT_ENABLED_STATE_ENABLED) {
context.getPackageManager()
.setComponentEnabledSetting(component, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
}