1

接続が確立された直後にデバイスから切断する方法は? 自分のデバイスがブラックリストに登録されたデバイスとデータ交換できないようにする必要があります

public class BluetoothReceiver extends BroadcastReceiver {
    if (action.equals(BluetoothDevice.ACTION_ACL_CONNECTED)) {
        BluetoothDevice remoteDevice = (BluetoothDevice) intent.getExtras().get(BluetoothDevice.EXTRA_DEVICE);
        // I'd like to disconnect from remoteDevice here 
    }
}

AndroidManifest.xml

<receiver android:name="com.app.receivers.BluetoothReceiver" >
    <intent-filter>
        <action android:name="android.bluetooth.device.action.ACL_CONNECTED" />
    </intent-filter>
</receiver>
4

2 に答える 2

2

次の解決策を見つけました。

ACTION_UUIDはペアリングとファイル転送の試行中に送信され、EXTRA_DEVICEによりデバイスを取得できます。このデバイスからすぐに切断したい場合は、実行できますremoveBond

private void removeBond(BluetoothDevice device) {
    try {
        Method m = device.getClass().getMethod("removeBond", (Class[]) null);
        m.invoke(device, (Object[]) null);
    } catch (Exception e) {
        Log.e("TAG", "Failed to disconnect from the device");
    }
}

完全に断線しているわけではありません。

更新 #1。

removeBondが呼び出されることがありますが、ファイルの送受信後に接続したデバイスのペアリングが解除されます。そのため、デバイスが Bluetooth 経由でデータ交換できないようにする唯一の方法は、BluetoothAdapter.getDefaultAdapter().disable()を呼び出して Bluetooth モジュールを無効にすることです。

if (action.equals(BluetoothDevice.ACTION_ACL_CONNECTED)) {
        BluetoothDevice remoteDevice = (BluetoothDevice) intent.getExtras().get(BluetoothDevice.EXTRA_DEVICE);
    if (isBlackListed(remoteDevice)) {
        BluetoothAdapter.getDefaultAdapter().disable();
    } 
}

利点

  • 信頼性

欠点

  • ヘッドセットが機能しなくなる
于 2013-10-29T10:41:33.023 に答える
-1
private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
        @Override
        public void onConnectionStateChange(BluetoothGatt gatt, int status,
                int newState) {
            // TODO Auto-generated method stub
            String intentAction;
            if(newState == BluetoothProfile.STATE_CONNECTED) {
                intentAction = ACTION_GATT_CONNECTED;
                mConnectionState = STATE_CONNECTED;
                broadcastUpdate(intentAction);
                Log.i(TAG, "Attempting to start service discovery:" + mBluetoothGatt.discoverServices());

            } else if(newState == BluetoothProfile.STATE_DISCONNECTED) {
                intentAction = ACTION_GATT_DISCONNECTED;
                mConnectionState = STATE_DISCONNECTED;
                Log.i(TAG, "Disconnected from GATT server");
                broadcastUpdate(intentAction);
            }
        }
}

mBluetoothGattを定義した後、ボタンまたは操作を押した後に次のコードを呼び出すことができます。

mBluetoothGatt.disconnect();
于 2013-10-28T12:22:07.980 に答える