3

Bluetoothデバイスが接続されているかどうかを検出するアプリを書いています。いくつかの調査を行った後、それを行うための最良の方法は、Bluetooth関連のインテントフィルターを備えた放送受信機を使用することであることがわかりました。

<receiver android:name=".BTReceiver" >
            <intent-filter>
            <action android:name="android.bluetooth.BluetoothDevice.ACTION_ACL_CONNECTED" />
            <action android:name="android.bluetooth.BluetoothDevice.ACTION_ACL_DISCONNECTED" />
            <action android:name="android.bluetooth.BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED" />
            <action android:name="android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED" />             
            </intent-filter>  
        </receiver>

そして、これが私のBluetoothレシーバークラスです。

@Override
    public void onReceive(Context context, Intent intent) {     
        String action = intent.getAction();
        if(action.equals("android.bluetooth.BluetoothDevice.ACTION_ACL_CONNECTED") || action.equals("android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED") ){
            Log.d("Z","Received: Bluetooth Connected");
        }
        if(action.equals("android.bluetooth.BluetoothDevice.ACTION_ACL_DISCONNECTED") ||action.equals("android.bluetooth.BluetoothDevice.ACTION_ACL_DISCONNECTED_REQUESTED")){
            Log.d("Z","Received: Bluetooth Disconnected");
        }
        Log.d("Z",action);
}

Bluetoothヘッドセットをオンにして電話に接続すると、「android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED」が2回表示されます。Bluetoothヘッドセットを切断すると、ブロードキャストレシーバーが実行されないか、何も受信されません。そのため、Bluetooth切断ログメッセージを受信しません。これを機能させるために必要だと思った2つのBluetooth権限を使用しています。

    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

ここで何が悪いのかについての情報を実際に使用することができます。ありがとうございました。

4

1 に答える 1

7

あなたの行動は間違っています。

<receiver android:name=".BTReceiver" >
        <intent-filter>
        <action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
        <action android:name="android.bluetooth.device.action.ACL_DISCONNECTED" />
        <action android:name="android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED" />           
        </intent-filter>  
    </receiver>

を取り外します

|| action.equals("android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED")  

CONNECTION_STATE_CHANGED は接続、切断などの可能性があるため、最初のifは常に true になります。a2dp で特別なことをしない限り、android.bluetooth.a2dp.profile.action.CONNECTION_STATE_CHANGED に登録する必要はありません。

したがって、それは

if(action.equals("android.bluetooth.device.action.ACL_CONNECTED") {
        Log.d("Z","Received: Bluetooth Connected");
    }
    if(action.equals("android.bluetooth.device.action.ACL_DISCONNECTED") ||action.equals("android.bluetooth.device.action.ACL_DISCONNECT_REQUESTED")){
        Log.d("Z","Received: Bluetooth Disconnected");
    }
于 2013-03-13T03:49:47.647 に答える