2

経由でサービスを登録しました

BluetoothServerSocket bs = BluetoothAdapter.getDefaultAdapter().listenUsingInsecureRfcommWithServiceRecord("someName" , UUID.fromString(myUuid)  );

私の質問は、このサービスで使用されているチャネルを特定するプログラムによる方法はありますか?

============================= 別の解決策=================== ====
: anserw @Skaard-Solo に感謝しますが、リフレクションを使用してソケットを作成すると、これに uuid を提供できません。
私はいくつかの調査を行い、BluetoothServerSocket からチャネルを取得できる簡単な関数を作成しました。

public int getChannel(BluetoothServerSocket bsSocket){
    Field[] f = bsSocket.getClass().getDeclaredFields();

    int channel = -1;

    for (Field field : f) {
        if(field.getName().equals("mChannel")){
            field.setAccessible(true);
            try {
                channel = field.getInt(bsSocket);
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
            field.setAccessible(false);
        }
    }

    return channel;
}
4

1 に答える 1

1

いいえ(AFAIK)、それは問題になる可能性があります. Android は、ソケットのオープン時に空いているチャネルを選択します。

本当にチャンネルを知る必要がある場合は、リフレクションによって rfcomm ソケットを作成し、チャンネルをパラメーターとして渡すことができます (一種のハック、listenUsingRfcommOnAndroid では @hide です)。

BluetoothServerSocket tmp = null;
Method m;
m = mAdapter.getClass().getMethod("listenUsingRfcommOn", new Class[] { int.class });
tmp = (BluetoothServerSocket) m.invoke(mAdapter, BLUETOOTH_CHANNEL);

これを扱っているこのリンクもチェックしてください;)

于 2013-09-03T11:53:22.397 に答える