这是我的代码。
我正在尝试将android连接到arduino。 但我想检查蓝牙状态,因为用户可以关闭蓝牙。 那时,我不希望蓝牙状态栏保持“连接”状态。
我尝试使用Thread而不是BroadcastReceiver。然后我的代码没有错误,但Thread没有工作。
也许在调用蓝牙活动时,Thread无法做某事。
使用BroadcastReceiver会更好吗?
private static final int REQUEST_CONNECT_DEVICE = 1;
private static final int REQUEST_ENABLE_BT = 2;
private BluetoothAdapter bluetoothAdapter = null;
private BluetoothThread btThread;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if(bluetoothAdapter == null) {
Toast.makeText(this, "Bluetooth is not available", Toast.LENGTH_LONG).show();
finish();
return;
}
bluetoothConnect();
btThread = new BluetoothThread();
btThread.start();
}
private void bluetoothConnect() {
if(!bluetoothAdapter.isEnabled()){
changeBtStatus(CONNECTING);
Intent enableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableIntent, REQUEST_ENABLE_BT);
} else{
changeBtStatus(CONNECTED);
ensureDiscoverable();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
if(requestCode == REQUEST_ENABLE_BT){
if(bluetoothAdapter.isEnabled()) {
changeBtStatus(CONNECTED);
ensureDiscoverable();
} else{
changeBtStatus(DISCONNECTED);
}
}
}
class BluetoothThread extends Thread{
@Override
public void run() {
// TODO Auto-generated method stub
super.run();
while(true){
try{
Thread.sleep(3000);
bluetoothConnect();
}catch(InterruptedException e){
//do noop
}
}
}
}
答案 0 :(得分:-1)
你不应该使用线程,你将不断地使用你的应用程序浪费电池,最好的办法是让一个听众在蓝牙关闭时通知你的应用程序。有一个接口。
http://developer.android.com/reference/android/bluetooth/BluetoothProfile.ServiceListener.html