0

スイッチが無効のときに、broadcastreceiverの登録を解除します。私はこれを試してみましたが、それは動作しません:BroadcastReceiver登録解除エラー

Switch BTswitch = (Switch)findViewById(R.id.BTswitch); 
    BTswitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked){ 
        registerReceiver(new mReceiver(), new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)); 
       } 
      else { 
        PackageManager pm = getPackageManager(); 
        ComponentName component = new ComponentName(MainActivity.this, mReceiver.class); 
        pm.setComponentEnabledSetting(component , PackageManager.COMPONENT_ENABLED_STATE_DISABLED , PackageManager.DONT_KILL_APP); 
       } 
     } 
    }); 

私も試してみました:ここ

unregisterReceiver(mReceiver); 

は私のアンドロイドのマニフェストです:

<receiver 
     android:name=".mReceiver" 
     android:enabled="false"> 
     <intent-filter> 
      <action android:name="android.bluetooth.adapter.action.STATE_CHANGED"/> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 

これはmReceiver.javaファイルです:

public class mReceiver extends BroadcastReceiver { 

private DevicePolicyManager mDevicePolicyManager; 
private ComponentName mComponentName; 


@Override 
public void onReceive(Context context, Intent intent) { 

登録を解除する方法。このコードは、ブロードキャストレシーバの登録を解除しません。常に実行されています。

+0

あなたが登録を解除する[unregisterReceiver](https://developer.android.com/reference/android/content/Context.html#unregisterReceiver(android.content.BroadcastReceiver))を使用しようとしましたか? – k3b

+0

はい、私は試みました:unregisterReceiver(mReceiver); –

答えて

0

実際に、それはあなたが切り替えないときは常に複数のインスタンス(mReceiverインスタンス)を作成し続ける:

registerReceiver(new mReceiver(), new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)); 
       } 

あなたは余裕があれば、あなただけのmReceiver

final Register receiver = new mReceiver(); 

@Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if (isChecked){ 
        registerReceiver(receiver , new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED)); 
       } 
の1つのインスタンスを使用するようにコードを変更することができます

のように、受信者の登録を解除するときには、同じmReceiverの登録を解除する必要があります。

unregisterReceiver (receiver); 
+0

ありがとうございました。登録を解除するには、PackageManager pm = getPackageManager()を使用する必要があります。 ComponentNameコンポーネント=新しいComponentName(MainActivity.this、mReceiver.class); pm.setComponentEnabledSetting(component、PackageManager.COMPONENT_ENABLED_STATE_DISABLED、PackageManager.DONT_KILL_APP); またはunregisterReceiver(mReceiver); –

+0

いいえ、ただ* unregisterReceiver(受信者)*、ほとんどの時間で動作します –

関連する問題