我一直在尝试开发一种在后台检测BLE设备的服务。启用蓝牙后,后台服务似乎运行良好。但是当蓝牙没有运行时我通过
打开蓝牙bluetoothAdapter.enable();
为了收听蓝牙适配器所做的更改,我在onCreate()方法中声明了我的服务中的broadcastreceiver,如下所示:
IntentFilter filter = new IntentFilter(BluetoothAdapter.ACTION_STATE_CHANGED);
registerReceiver(receiver, filter);
我的广播接收器看起来像这样:
private final BroadcastReceiver receiver = new BroadcastReceiver()
{
@Override
public void onReceive(Context context, Intent intent) {
final String action = intent.getAction();
Log.v("Broadcast called", "in service");
if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED))
{
final int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
switch (state) {
case BluetoothAdapter.STATE_OFF:
Log.v("Bluetooth state", "Off");
break;
case BluetoothAdapter.STATE_TURNING_OFF:
Log.v("Bluetooth state", "Turning Off");
break;
case BluetoothAdapter.STATE_ON:
Log.v("Bluetooth state", "Turned On");
scanLeDevice(true) ;
break;
case BluetoothAdapter.STATE_TURNING_ON:
Log.v("Bluetooth state", "Turning On");
break;
}
}
}
};
adapter.enable()调用成功打开蓝牙但是我面临的问题是接收器中的onReceive方法永远不会被触发,因此我无法运行并扫描BLE设备。
当我在活动中执行完全相同的步骤时,一切都很完美。
起初我认为onReceive没有被触发,因为服务是在后台线程中。所以我也通过WakefullBroadcastReceiver触发了服务,但是没有改变行为。
我想了解我在这里做错了什么,并帮助解决这个问题。