Android SDKを使用して、ペアリング済みのBluetoothデバイスにプログラムで接続する方法はありますか?
つまり、[設定]-> [無線とネットワーク]-> [Bluetooth設定]に移動し、デバイス(「ペアリングされているが接続されていない」と表示)をタップします。プログラムでこれを実行できるようにしたいのですが、これを行う方法がわかりません。
RFCOMMソケットを作成するオプションがあり、SPPデバイスの場合は接続部分も行うと想定していますが、A2DPデバイスの場合は実際のデータ転送はOSではなくOSによって処理されます私のアプリ、私はそれが適用されないと思いますか?
さて、これは私を夢中にさせていたので、ソースコードを掘り下げて、100%信頼できる(少なくとも私のNexus 4では、Android 4.3)に接続するソリューションを見つけましたペアリングされたA2DPデバイス(ヘッドセットやBluetoothオーディオデバイスなど)。完全に機能するサンプルプロジェクト(Android Studio)で簡単にビルドできます)を公開しました Github にあります。
基本的に、あなたがする必要があるのは:
BluetoothAdapter
のインスタンスを取得しますadapter.getProfileProxy (context, listener, BluetoothProfile.A2DP);
listener
は、onServiceConnected()
コールバックでServiceListener
を受け取るBluetoothProfile
です(_BluetoothA2dp
_インスタンスにキャストできます)
connect(BluetoothDevice)
メソッドを取得します。Method connect = BluetoothA2dp.class.getDeclaredMethod("connect", BluetoothDevice.class);
BluetoothDevice
を見つけます:_String deviceName = "My_Device_Name";
BluetoothDevice result = null;
Set<BluetoothDevice> devices = adapter.getBondedDevices();
if (devices != null) {
for (BluetoothDevice device : devices) {
if (deviceName.equals(device.getName())) {
result = device;
break;
}
}
}
_
connect()
メソッドを呼び出します:connect.invoke(proxy, result);
少なくとも私にとっては、デバイスの即時接続を引き起こしました。
問題を解決するために見つけた最善の方法は、Bluetooth設定画面を表示するボタンを作成できることを見つけることでした。私はあなたがこれを行うことができるとは思わなかった、または私は最初から持っていただろう。
startActivity(new Intent(Settings.ACTION_BLUETOOTH_SETTINGS));
デバイスがすでにペアリングされている場合、使用できます
if(device.getBondState()==device.BOND_BONDED){
Log.d(TAG,device.getName());
//BluetoothSocket mSocket=null;
try {
mSocket = device.createInsecureRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e1) {
// TODO Auto-generated catch block
Log.d(TAG,"socket not created");
e1.printStackTrace();
}
try{
mSocket.connect();
}
catch(IOException e){
try {
mSocket.close();
Log.d(TAG,"Cannot connect");
} catch (IOException e1) {
Log.d(TAG,"Socket not closed");
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
mY_UUID用
private static final UUID MY_UUID = UUID.fromString("0000110E-0000-1000-8000-00805F9B34FB");
上記のコードスニペットは、デバイスをA2DP対応デバイスに接続するためのものです。うまくいくことを願っています。
アプリのこの機能の開始点として、ここでコードを使用しました: http://developer.Android.com/guide/topics/wireless/bluetooth.html#ConnectingDevices
デバイスがペアリングされると、アプリは問題なく2つのデバイスをプログラムで接続します。