检测蓝牙适配器通过后台服务进行的状态更改

时间:2015-02-18 07:07:06

标签: android bluetooth

我一直在尝试开发一种在后台检测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触发了服务,但是没有改变行为。

我想了解我在这里做错了什么,并帮助解决这个问题。

0 个答案:

没有答案