どこを見ても、Bluetooth アダプター用のこのメソッド「getBondedDevices()」が見つかります。ただし、タブレットと別の bluetooth デバイスが隣にあり、結合デバイスのリストにデバイスを実際に表示する方法がわかりません。
2 に答える
Bluetooth 用語では、「結合」と「ペアリング」は基本的に同義語です (正式には、ペアリングのプロセスは結合につながりますが、ほとんどの人はそれらを交換可能に使用します)。デバイスをそのリストに追加するには、1 つのデバイスが別のデバイスを検索して見つける方法であるDiscoveryのプロセスを経る必要があります。その後、2 つをペアリングします。
実際にはユーザーとしてデバイス設定からこれを行うことができますが、アプリのコンテキスト内でそうしようとしている場合、プロセスは次のようになります。
- と を登録
BroadcastReceiver
するBluetoothDevice.ACTION_FOUND
BluetoothAdapter. ACTION_DISCOVERY_FINISHED
- 呼び出して検出を開始する
BluetoothAdapter.startDiscovery()
- 新しいデバイスが範囲内に見つかるたびに、最初のアクションでレシーバーが呼び出され、それを調べて、接続したいデバイスかどうかを確認できます。
BluetoothAdapter.cancelDiscovery()
必要以上にバッテリーを浪費しないことがわかったら、電話をかけることができます。 - ディスカバリーが完了すると、それをキャンセルしていなければ、レシーバーは 2 番目のアクションで呼び出されます。これ以上デバイスを期待する必要はありません。
BluetoothSocket
デバイス インスタンスを用意して、とを開きますconnect()
。デバイスがまだ結合されていない場合、これによりペアリングが開始され、PIN コードのシステム UI が表示される場合があります。- ペアリングされると、ユーザーが設定に移動して削除するまで、デバイスは結合されたデバイスのリストに表示されます。
- この
connect()
メソッドは実際にソケット リンクも開き、例外をスローせずに返されると、2 つのデバイスが接続されます。 - 接続されたので、ソケットから
getInputStream()
andを呼び出して、データの読み取りと書き込みを行うことができます。getOutputStream()
基本的に、結合されたデバイスのリストを調べて、外部デバイスにすばやくアクセスできますが、ほとんどのアプリケーションでは、これと真の検出を組み合わせて、ユーザーが何であろうと常にリモート デバイスに接続できることを確認します。します。デバイスが既に結合されている場合は、接続と通信のために手順 5 ~ 7 を実行するだけです。
詳細とサンプル コードについては、Android SDK Bluetooth Guideの「Discovering Devices」セクションと「Connecting Devices」セクションをご覧ください。
HTH
API レベル 19 以降では、接続先の BluetoothDevice インスタンスで createBond() を呼び出すことができます。表示されているデバイスを検出して一覧表示するには、いくつかの権限が必要です
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
デバイスを検出して一覧表示するコード:
bluetoothFilter.addAction(BluetoothDevice.ACTION_FOUND);
bluetoothFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_STARTED);
bluetoothFilter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
registerReceiver(bluetoothReceiver, bluetoothFilter);
private BroadcastReceiver bluetoothReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (BluetoothDevice.ACTION_FOUND.equals(action)) {
Log.e("bluetoothReceiver", "ACTION_FOUND");
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
devicesList.add((device.getName() != null ? device.getName() : device.getAddress()));
bluetoothDevicesAdapter.notifyDataSetChanged();
} else if (BluetoothAdapter.ACTION_DISCOVERY_STARTED.equals(action)) {
Log.e("bluetoothReceiver", "ACTION_DISCOVERY_STARTED");
} else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
Log.e("bluetoothReceiver", "ACTION_DISCOVERY_FINISHED");
getActivity().unregisterReceiver(bluetoothReceiver);
}
}
};
選択したデバイスで createBond() を呼び出すだけです。