Как включить/выключить Bluetooth на G1 программно

Мы уже писали о программном включениии/выключении GPS на G1 теперь скажем немного о Bluetooth.

Процесс аналогичен. Всё работает через рефлексию, через вызов приватных методов isEnable, enable и disable службы Bluetooth.

package maximyudin.usefulswitchers;
 
import java.lang.reflect.Method;
 
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
 
/**
* Класс для работы с Bluetooth
*
* @author Maxim Yudin
*
*/

public class BluetoothDevice {
public final String ENABLED_ACTION = "android.bluetooth.intent.action.ENABLED";
public final String DISABLED_ACTION = "android.bluetooth.intent.action.DISABLED";
 
private final Context mContext;
private Object mDevice;
private Method mEnable;
private Method mDisable;
private Method mIsEnabled;
private IntentFilter mIntentFilter;
private boolean mWaitState;
private boolean mIsBusy = false;
 
public BluetoothDevice(Context context) {
mContext = context;
try {
mDevice = mContext.getSystemService("bluetooth");
if (mDevice != null) {
Class<?> bluetoothService = mDevice.getClass();
mEnable = bluetoothService.getMethod("enable");
mEnable.setAccessible(true);
mDisable = bluetoothService.getMethod("disable");
mDisable.setAccessible(true);
mIsEnabled = bluetoothService.getMethod("isEnabled");
mIsEnabled.setAccessible(true);
}
mIntentFilter = new IntentFilter(ENABLED_ACTION);
mIntentFilter.addAction(DISABLED_ACTION);
mIsBusy = false;
} catch (Exception e) {
e.printStackTrace();
}
}
 
/**
* Включение Bluetooth
*
* @return Возвращает true, если запрос на включение был выполнен; false,
* если нет. Оповещение о реальном включении Bluetooth происходит в
* OnChangeListener
*/

public boolean enable() {
try {
if ((Boolean) mEnable.invoke(mDevice) == true) {
mIsBusy = true;
mWaitState = true;
}
callOnChangeListener();
} catch (Exception e) {
e.printStackTrace();
}
return mIsBusy;
}
 
/**
* Выключение Bluetooth
*
* @return Возвращает true, если запрос на выключение был выполнен; false,
* если нет. Оповещение о реальном выключении Bluetooth происходит в
* OnChangeListener
*/

public boolean disable() {
try {
if ((Boolean) mDisable.invoke(mDevice) == true) {
mIsBusy = true;
mWaitState = false;
}
callOnChangeListener();
} catch (Exception e) {
e.printStackTrace();
}
return mIsBusy;
}
 
/**
* Возвращает true, если Bluetooth включен, и false, если нет.
*/

 
/**
* Возвращает состояние Bluetooth
*
* @return Возвращает true, если Bluetooth включен; false, если нет.
*/

public boolean isEnabled() {
boolean bEnabled = false;
try {
bEnabled = (Boolean) mIsEnabled.invoke(mDevice);
} catch (Exception e) {
e.printStackTrace();
}
return bEnabled;
}
 
/**
* @return Возвращает true, если устройство в процессе включения/выключения
*/

public boolean isBusy() {
return mIsBusy;
}
 
/**
* Возвращает строку, содержащую текущее состояние Bluetooth, до
* окончательного включения/выключения
*/

public String getStatus() {
String str = null;
if (isBusy()) {
if (mWaitState == true)
str = mContext.getString(R.string.bluetoothturningon);
else
str = mContext.getString(R.string.bluetoothturningoff);
}
return str;
}
 
/**
* Вызывается, если Activity входит в приостановленное состояние Выключается
* прием широковещательных намерений через BroadcastReceiver
*/

public void pause() {
mContext.unregisterReceiver(mBluetoothReceiver);
}
 
/**
* Вызывается, если Activity выходит из приостановленного состояния
* Регистрирует прием широковещательных намерений через BroadcastReceiver
*/

public void resume() {
mContext.registerReceiver(mBluetoothReceiver, mIntentFilter);
}
 
/**
* BroadcastReceiver оповещает, когда реально изменится состояние Bluetooth
* (enable/disable)
*/

private final BroadcastReceiver mBluetoothReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(ENABLED_ACTION)) {
} else if (action.equals(DISABLED_ACTION)) {
}
mIsBusy = false;
callOnChangeListener();
}
};
 
/**
* Используется для управления событиями, которые изменяют состояния
* Bluetooth
*/

protected OnChangeListener mOnChangeListener = null;
 
/**
* Вызывает OnChangeListener, если он определен
*/

protected void callOnChangeListener() {
if (mOnChangeListener != null) {
mOnChangeListener.onChange(this);
}
}
 
/**
* Регистрирует обратный вызов (callback), когда изменяется состояние
* Bluetooth
*
* @param listener
* Обратный вызов, который будет запущен
*/

public void setOnChangeListener(OnChangeListener listener) {
mOnChangeListener = listener;
}
 
/**
* Определение интерфейса для обратного вызова changes.
*/

public interface OnChangeListener {
/**
* Вызывается, когда изменяется состояние Bluetooth
*
* @param device
* Bluetooth-устройство.
*/

void onChange(BluetoothDevice device);
}
}
А вот пример Bluetooth-устройства
bluetoothDevice = new BluetoothDevice(this);
bluetoothDevice.setOnChangeListener(new BluetoothDevice.OnChangeListener() {
public void onChange(BluetoothDevice device) {
if (!device.isBusy()) {
// когда устройство уже окончательно будет включенно/отключено,
// тут вы можете написать любой код обновляющий допустим
// какие-нибудь TextView, говорящие пользователю
// о текущем состоянии Bluetooth-устройства
}
}
});
таков обработчик события onChange.

Копи-паста

Копи-паста што-ли?
http://habrahabr.ru/blogs/android/47430/

Материалы попадают и на наш

Материалы попадают и на наш сайт и на хабр не всегда из первоисточников(их зачастую слишком сложно определить, тем более что гугл может их светить далеко не в топ 1000 по большинству запросов), а в результате обработки различных прочтённых новостей, исходники же копируются один в один ибо это исходники. Всякое может быть, но тупо копипастить - это не совсем стиль нашего сайта, уж извините.
Авторские комментарии сохранены. С хабра взят хорошо подсвеченный текст исходника.

Отправить комментарий
Содержание этого поля является приватным и не предназначено к показу.
CAPTCHA
Вы человек? Если да, то напишите пожалуйста оба слова, указанных на картинке.

Сейчас на сайте

Сейчас на сайте 0 пользователей и 1 гость.

Вход в систему

android

Комментарии