私は、Bluetooth接続を使用するアプリケーションを作っています。私はonCreate()
でブルートゥース接続を呼び出し、MainActivity
のonDestroy()
でそれを閉じています:AndroidでBluetoothSocketの画面ローテーションを閉じるにはどうすればよいですか?
// Bluetooth
private Bluetooth bt;
private boolean registered = false;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bt = new Bluetooth(this);
bt.enableBluetooth();
bt.setCommunicationCallback(this);
bt.connectToName(bt.getBluetoothDevice(this));
IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(mReceiver, filter);
registered = true;
}
@Override
public void onDestroy() {
super.onDestroy();
if(registered) {
unregisterReceiver(mReceiver);
registered=false;
}
bt.removeCommunicationCallback();
bt.disconnect();
if (handler != null && runnable != null) {
handler.removeCallbacks(runnable);
}
}
アプリはまた、(2種類のレイアウトを使用して)LANDSCAPEとPORTRAITモードをサポートしています。画面が回転すると、MainActivity
は異なるレイアウトのためにonCreate()
とonDestroy
の関数を呼び出します。私はInvalid heap address and fatal signal 11で見たよう
@@@ ABORTING: INVALID HEAP ADDRESS IN dlfree addr=0x5a71aa38
A/libc: Fatal signal 11 (SIGSEGV) at 0xdeadbaad (code=1), thread 1051 (le.bluetoothled)
は、それがBluetoothSocketのclose()
方法からだった。そのため、私は、次のエラーを得ました。まず、私たちは画面を回転させるときには近くのブルートゥースが必要ないと思うので、この方法を電話機のdetect rotation eventに使用しようとしましたが、回転が起こっても閉じないようにしましたが、動作しません。したがって、私は、画面の回転時にBluetoothを閉じる必要があるかもしれないと思うが、私は上記のエラーがある。私はこれをどのように解決できるのか分かりません。その問題を解決するのに手伝ってくれますか?
public void disconnect() {
try {
socket.close();
} catch (IOException e) {
if(communicationCallback!=null)
communicationCallback.onError(e.getMessage());
}
}
を私の現在のソリューションは、睡眠を使用していると次のように私はdisconnect()
でthisブルートゥースのlibを使用しています。 closeソケットの前にThread.sleep (1000)
を追加しました。それは働いている。しかし、私はそれが非常に良い解決策ではないと思う。
あなたの 'Bluetooth'クラスは何ですか?それは 'サービス'ですか? – Bryan
いいえ普通のクラスはhttps://github.com/omaflak/Bluetooth-Library/blob/master/bluetooth/src/main/java/me/aflak/bluetooth/Bluetooth.javaです – Jame
Bluetooth接続のために作成したスレッドはまだ実行されていて、デバイスを回転していますか?彼らは古い活動を参照し続けます。アクティビティコールバックへの参照をクリアしようとしていますが、nullの場合は別のスレッドにチェックインします。それは安全ではありません。 – masp