Ответ 1
Android BluetoothAdapter docs говорят, что он доступен с API уровня 5. API уровня 5 - это Android 2.0.
Вы можете попробовать использовать backport API Bluetooth (не пробовали его лично): http://code.google.com/p/backport-android-bluetooth/
Я хочу включить/отключить Bluetooth через программу. У меня есть следующий код.
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (!mBluetoothAdapter.isEnabled()) {
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
Но этот код не работает в SDK 1.5. Как я могу заставить это работать?
Android BluetoothAdapter docs говорят, что он доступен с API уровня 5. API уровня 5 - это Android 2.0.
Вы можете попробовать использовать backport API Bluetooth (не пробовали его лично): http://code.google.com/p/backport-android-bluetooth/
этот код работал у меня..
//Disable bluetooth
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter.isEnabled()) {
mBluetoothAdapter.disable();
}
Для этого вы должны иметь следующие разрешения:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Вот несколько более надежный способ сделать это, также обрабатывая возвращаемые значения методов enable()\disable()
:
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;
}
И добавьте следующие разрешения в файл манифеста:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Но помните эти важные моменты:
Это асинхронный вызов: он немедленно вернется, и клиенты должны прослушать ACTION_STATE_CHANGED, чтобы получать уведомления о последующих изменениях состояния адаптера. Если этот вызов возвращает true, тогда состояние адаптера немедленно перейдет из STATE_OFF в STATE_TURNING_ON и через некоторое время перейдет на STATE_OFF или STATE_ON. Если этот вызов возвращает false, возникла непосредственная проблема, которая предотвратит включение адаптера - например, режим самолета или адаптер уже включен.
ОБНОВИТЬ:
Итак, как реализовать прослушиватель bluetooth?:
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 has been on
break;
case BluetoothAdapter.STATE_TURNING_ON:
// Bluetooth is turning on
break;
}
}
}
};
И как зарегистрировать/отменить регистрацию получателя? (В вашем классе Activity
)
@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);
}
Чтобы включить Bluetooth, вы можете использовать одну из следующих функций:
public void enableBT(View view){
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (!mBluetoothAdapter.isEnabled()){
Intent intentBtEnabled = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
// The REQUEST_ENABLE_BT constant passed to startActivityForResult() is a locally defined integer (which must be greater than 0), that the system passes back to you in your onActivityResult()
// implementation as the requestCode parameter.
int REQUEST_ENABLE_BT = 1;
startActivityForResult(intentBtEnabled, REQUEST_ENABLE_BT);
}
}
Вторая функция:
public void enableBT(View view){
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (!mBluetoothAdapter.isEnabled()){
mBluetoothAdapter.enable();
}
}
Разница в том, что первая функция заставляет приложение запрашивать у пользователя разрешение на включение Bluetooth или отказ. Вторая функция делает приложение напрямую включать Bluetooth.
Чтобы отключить Bluetooth, используйте следующую функцию:
public void disableBT(View view){
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter.isEnabled()){
mBluetoothAdapter.disable();
}
}
ПРИМЕЧАНИЕ. Для первой функции в файле AndroidManifest.xml требуется только следующее разрешение:
<uses-permission android:name="android.permission.BLUETOOTH"/>
В то время как вторая и третья функции должны иметь следующие разрешения:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Решение prijin отлично работало для меня. Просто справедливо отметить, что необходимы два дополнительных разрешения:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Когда они добавлены, включение и отключение работает безупречно с адаптером bluetooth по умолчанию.
Я использовал приведенный ниже код, чтобы отключить BT, когда приложение запускается и работает нормально. Не уверен, что это правильный способ реализовать это, поскольку Google рекомендует не использовать "bluetooth.disable();" без явного действия пользователя, чтобы отключить Bluetooth.
BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
bluetooth.disable();
Я использовал только разрешение ниже.
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Добавьте в свой файл манифеста следующие разрешения:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Включите bluetooth, используйте этот
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (!mBluetoothAdapter.isEnabled()) {
mBluetoothAdapter.enable();
}else{Toast.makeText(getApplicationContext(), "Bluetooth Al-Ready Enable", Toast.LENGTH_LONG).show();}
Отключить bluetooth использовать это
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter.isEnabled()) {
mBluetoothAdapter.disable();
}
попробуйте следующее:
//this method to check bluetooth is enable or not: true if enable, false is not enable
public static boolean isBluetoothEnabled()
{
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (!mBluetoothAdapter.isEnabled()) {
// Bluetooth is not enable :)
return false;
}
else{
return true;
}
}
//method to enable bluetooth
public static void enableBluetooth(){
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (!mBluetoothAdapter.isEnabled()) {
mBluetoothAdapter.enable();
}
}
//method to disable bluetooth
public static void disableBluetooth(){
BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
if (mBluetoothAdapter.isEnabled()) {
mBluetoothAdapter.disable();
}
}
Добавьте эти разрешения в манифест
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>