我有一个Android手机和非Android设备,就像我的蓝牙拨号器一样。
据我所知
对于像ACL_CONNECTED
这样的监听器,如果在应用程序运行时连接蓝牙设备,我们就能抓住它的连接。
但有没有办法知道设备是否在启动应用程序之前连接到手机并且我的应用可以通过它连接?
换句话说
在我开始申请之前,如果设备已连接,我会收到ACL_CONNECTED
或其他收件人吗?
感谢。
答案 0 :(得分:1)
使用BroadcastReceiver
在设备连接时接收广播,使用SharedPreference
存储类似布尔值的值。
这可能是接收者的代码:
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().contentEquals("android.bluetooth.device.action.ACL_CONNECTED")) {
//DO SOMETHING, like using a SharedPreference
} else {
if (intent.getAction().contentEquals("android.bluetooth.device.action.ACL_DISCONNECT")) {
//DO SOMETHING
}
}
您还应该在设备连接后启动服务,查看蓝牙是否已关闭,然后将SharedPreference
设置为false,因为您不会收到ACL_DISCONNECT
广播。
这可能是这样的:
public class BTService extends Service {
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
IntentFilter filter2 = new IntentFilter();
filter2.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(rec_bt_change, filter2);
}
private final BroadcastReceiver rec_bt_change = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1) == BluetoothAdapter.STATE_OFF) {
//SettingsClass.log_me(tag, "BT turned off, stopping");
//DO SOMETHING
stopSelf();
}
}
};
}