web-dev-qa-db-ja.com

文字列のBluetoothアドレスでデバイスに接続する

Androidアプリを実行していて、別のデバイスのMACを文字列(17文字長)として持っている場合、そのデバイスに接続するためにそのデバイスを使用する必要があります(スレッドを開始するスレッド) Bluetooth接続)私は午後中それをいじっていますが、それを行う方法を理解できません。問題は、BluetoothDeviceを文字列に設定することができないことです。これを行う方法はありますか?できる/するべきか?

(私の試みをここにコードとして入れないことを決定しました、それらがどのようにエラーでいっぱいだったかを見てください)

まったく同じアプリケーションを実行している別のタブレットと通信する必要があります。以前に this ページを調べましたが、私のアプリのほとんどはそれに基づいています。私の主な問題は、ConnectThreadの例を使用するときです。

MACアドレスの文字列があります。そのMACに接続するにはどうすればよいですか?

どんな助けも高く評価されます、

16
Marshall

私が正しく理解していれば、MACアドレスが文字列としてあり、デバイスに接続したいと思いますよね?これはうまくいくはずです:

BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
BluetoothSocket tmp = null;
BluetoothSocket mmSocket = null;

// Get a BluetoothSocket for a connection with the
// given BluetoothDevice
try {
    tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
    Method m = device.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
    tmp = (BluetoothSocket) m.invoke(device, 1);
} catch (IOException e) {
    Log.e(TAG, "create() failed", e);
}
mmSocket = tmp;

これは、このシンプルなオープンソースのソースコードからの抜粋ですAndroid App: https://github.com/janosgyerik/bluetoothviewer

アプリは、Bluetooth接続と生のプロトコルデータをデバッグするためのシンプルなツールです。 (今のところ、ASCIIでのみ、16進数もデバッグする機能を追加する予定です。)

29
janos

最初に、Bluetoothデバイスがサポートするプロファイルを見つける必要があります。たとえば、HDPプロファイルを使用できる医療デバイスや、Bluetooth経由で単純なRS232を使用することができます。コードを書き始める前に、さまざまなプロファイルに対してBluetooth接続がどのように確立されるかを理解することが重要です。

ここから始めるのに良いリンクです。 Android SDKには、最初に使用できるいくつかの基本的な例も含まれています。

http://developer.Android.com/guide/topics/connectivity/bluetooth.html

編集:

デバイスが正常にペアリングされると、ペアリングされたデバイスのリストにMACアドレスが表示されます。たとえば、これを実行して、デバイスのMACアドレスと一致するデバイスを見つけることができます。

  Set<BluetoothDevice> pairedDevices = mBluetoothAdapter
                    .getBondedDevices();
            if (pairedDevices.isEmpty()) {
                Log.e(TAG,
                        "No devices paired...");
                return ;
            }

    for (BluetoothDevice device : pairedDevices) {
                Log.d(TAG, "Device : address : " + device.getAddress() + " name :"
                        + device.getName());
            if (MY_MAC_ADDR.equals(device.getAddress())) {
                mDevice = device;
                break;
            }
    }

お役に立てば幸いです。

3
Ramp

文字列値をBluetoothデバイスに変換します。

BluetoothManager bluetoothManager = (BluetoothManager)getSystemService(Context.BLUETOOTH_SERVICE);
BluetoothDevice mBluetoothDevice = bluetoothManager.getAdapter() .getRemoteDevice("deviceAddress");
2
sivaprakash