Đây là một cách mạnh mẽ hơn để thực hiện việc này, cũng xử lý các giá trị trả về của các enable()\disable()
phương thức:
public static boolean setBluetooth(boolean enable) {
BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
boolean isEnabled = bluetoothAdapter.isEnabled();
if (enable && !isEnabled) {
return bluetoothAdapter.enable();
}
else if(!enable && isEnabled) {
return bluetoothAdapter.disable();
}
// No need to change bluetooth state
return true;
}
Và thêm các quyền sau vào tệp kê khai của bạn:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Nhưng hãy nhớ những điểm quan trọng sau:
Đây là một cuộc gọi không đồng bộ: nó sẽ trả về ngay lập tức và khách hàng phải lắng nghe ACTION_STATE_CHANGED để được thông báo về những thay đổi trạng thái bộ điều hợp tiếp theo. Nếu lệnh gọi này trả về true, thì trạng thái bộ điều hợp sẽ ngay lập tức chuyển từ STATE_OFF sang STATE_TURNING_ON và một thời gian sau chuyển đổi sang STATE_OFF hoặc STATE_ON. Nếu cuộc gọi này trả về false thì đã xảy ra sự cố ngay lập tức khiến bộ điều hợp không được bật - chẳng hạn như Chế độ trên máy bay hoặc bộ điều hợp đã được bật.
CẬP NHẬT:
Ok, vậy làm thế nào để triển khai bluetooth nghe ?:
private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE,
BluetoothAdapter.ERROR);
switch (state) {
case BluetoothAdapter.STATE_OFF:
// Bluetooth has been turned off;
break;
case BluetoothAdapter.STATE_TURNING_OFF:
// Bluetooth is turning off;
break;
case BluetoothAdapter.STATE_ON:
// Bluetooth is on
break;
case BluetoothAdapter.STATE_TURNING_ON:
// Bluetooth is turning on
break;
}
}
}
};
Và làm thế nào để đăng ký / hủy đăng ký đầu thu? (Trong Activity
lớp của bạn )
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ...
// Register for broadcasts on BluetoothAdapter state change
IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(mReceiver, filter);
}
@Override
public void onStop() {
super.onStop();
// ...
// Unregister broadcast listeners
unregisterReceiver(mReceiver);
}