デバイスへの接続に SPP プロファイルを使用しています。
Set<BluetoothDevice> devices = ba.getBondedDevices();
for(BluetoothDevice bd : devices)
{
String name = bd.getName();
if(name.equals("CELLMETER"))
{
try
{
BluetoothSocket bs = bd.createRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
bs.connect();
} catch (IOException e)
{
e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
}
}
}
すべて問題ないようです。入出力バッファを閉じてソケットを閉じる関数を作成しました。しかし、アプリケーションがクラッシュしたり、ブレークポイントが到着したときにアプリケーションを停止したりすると、プロセスを手動で強制終了した後でもソケットが閉じず、アプリの新しいインスタンスからの新しい接続には使用できません。
私が間違っているのは何ですか?クラッシュ/デバッグ操作ごとに、電話を再起動する必要があります:(
Android 2.3.5 (Samsung 5830i) および Android 4.0.4 (Freelander P10) でのみ発生します。Android 4.2.1 (Galaxy Nexus) では、アプリがクラッシュした後、接続が自動的に閉じられます。(新しい Bluetooth スタックがあるためと思われます)