2011-06-30 4 views
37

は、私は私のマニフェストに以下の受信機に対処するためのJavaコードでregisterReceiverとunregisterReceiverを使用して知っている、しかし、のは、私が持っているとしましょう:Android - マニフェストで作成した受信機の登録を解除するにはどうすればよいですか?

<receiver android:name=".headsetHook"> 
     <intent-filter android:priority="99999999999"> 
      <action android:name="android.intent.action.ACTION_HEADSET_PLUG" /> 
     </intent-filter> 
    </receiver> 

私はJavaコードでこのどこかの登録を解除することができ方法はありますか? id属性などを与えて、それを取得して登録を解除できますか?私は、このアクションが起こったときに初めて自分のアプリに何かをさせてから、それを登録解除して、Javaで後で再登録したいと思っています。

私はそれを明確にしました。何か助けてくれてありがとう。

答えて

78

PackageManagerを使用して、マニフェストで宣言されたBroadcastReceiverを有効/無効にすることができます。 Broadcast Receiverは、有効になっている場合にのみ起動します。コンポーネントが

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"); 
} 

有効か無効かを

このコンポーネントを使用し

ComponentName component = new ComponentName(context, MyReceiver.class); 

チェックを作成するために

有効/(あなたのケースで放送レシーバー)コンポーネントを無効に

//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); 
+1

あなたは上司です。私はこれを試してみましょう、有望に見えます。 – JDS

+3

ちょうど注意:あなたは、ステータスCOMPONENT_ENABLED_STATE_DEFAULTにも –

+0

@Varun +1グレート回答を得ることができます。..ワーキングニース.. – Venky

0

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); 
     } 
    } 
関連する問題