現在、BluetoothデバイスがAPI 14以上を使用してAndroidデバイスに接続されているかどうかを検出しようとしています。私はBluetoothSocket.isConnected()メソッドを使用できるはずですが、何をしても、接続されているかどうかにかかわらず、今まではfalseを返しています。Android BluetoothSocket.isConnectedは常にfalseを返します
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<!-- Locale 4.x supports API 14 or greater. -->
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="17" />
<uses-feature android:name="android.hardware.bluetooth" />
、問題のコード:
AndroidManifestは、これらの行が含ま
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
for (BluetoothDevice device : pairedDevices) {
Log.i(Constants.LOG_TAG, String.format(Locale.US, "Device: %s connected: %b", device.getName(), isConnected(device))); //$NON-NLS-1$z
}
}
private boolean isConnected(BluetoothDevice device) {
BluetoothSocket socket = null;
// Get a BluetoothSocket for a connection with the given BluetoothDevice
UUID SPP_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
try {
socket = device.createRfcommSocketToServiceRecord(SPP_UUID);
} catch (IOException e) {
Log.e(Constants.LOG_TAG, e.getMessage()); //$NON-NLS-1$z
return false;
}
Log.i(Constants.LOG_TAG, socket.toString()); //$NON-NLS-1$z
return socket.isConnected();
}
エラーがスローされませんが、それは単に時間の "偽" の100%を返します。私が正しいことをしていないことはありますか?
反射部分は、この質問に対する受け入れられた回答から来ました:http://stackoverflow.com/questions/3397071/service-discovery-failed-exception-using-bluetooth-on-android。私は反射という考えに驚いたわけではありませんが、元の質問からUUIDに頼ってはいけないということを他の場所で覚えていると思います。 私にとっての重要な問題は、答えの2番目の部分です。私は接続されているBTデバイスを見つけようとしており、自分で接続しようとしていません。それは不可能ですか?私は、BT状態の変化を監視するサービスを作成する必要がないようにしようとしています。 – jkane001
Ameenは、SO答えとAndroidドキュメントをもっと慎重に読んだ後、ここで反射が必要ないことに気付きました。私はより良い "isConnected"メソッドで私の元の質問を更新しましたが、私の質問は残っています:BTデバイスが接続されていない状態で接続されているかどうかを検出する方法はありますか? – jkane001