Android BLE - BroadcastReceiver не получает обновления подключения BLE (ACTION_STATE_CHANGED и т. Д.) - PullRequest
0 голосов
/ 04 октября 2018

Мой onCreate () выглядит так:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    IntentFilter myIntentFilter = new IntentFilter("BATTERY_LEVEL");
    myIntentFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
    myIntentFilter.addAction(BluetoothAdapter.ACTION_CONNECTION_STATE_CHANGED);
    LocalBroadcastManager.getInstance(this).registerReceiver(onBroadcastReceive, myIntentFilter);

More things....
}

И тогда у меня этот класс ниже основной активности:

BroadcastReceiver onBroadcastReceive = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.i("Main Activity", "Broadcast received");
        String action = intent.getAction();
        Log.i("Action is", action);
        if (action != null) {
            switch (action) {
                case "BATTERY_LEVEL":
                    I can take it from here...
            }
        }

И я могу взять его оттуда.Я просматриваю распечатку «Действие есть», чтобы увидеть входящие трансляции.

Позже в моем основном приложении я вызываю службу, которая устанавливает соединение Bluetooth на переднем плане.Я знаю, что связь хорошая.Во-первых, этот код в службе работает правильно, и я получаю «gattCallback STATE_CONNECTED»:

private final BluetoothGattCallback gattCallback = new BluetoothGattCallback() {
        @Override
        public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
            //status of 0 if operation succeeds
            Log.i("onConnectionStateChange", "Status: " + status);
            switch (newState) {
                case BluetoothProfile.STATE_CONNECTED:
                    Log.i("gattCallback", "STATE_CONNECTED");
                    android.os.SystemClock.sleep(600);
                    gatt.discoverServices();
                    break;
                case BluetoothProfile.STATE_DISCONNECTED:
                    Log.e("gattCallback", "STATE_DISCONNECTED");
                    mGatt.close();
                    break;
                default:
                    Log.e("gattCallback", "STATE_OTHER");
            }

        }
    }

И, во-вторых, служба отправляет обратно Intents в основное приложение (действие «BATTERY_LEVEL» какопределено в onCreate () ". Эти уровни заряда аккумулятора поступают от устройства Bluetooth. Я получаю сообщения, которые говорят

I/Main Activity: Broadcast received
I/Action is: BATTERY_LEVEL

Но я никогда не получаю ACTION_STATE_CHANGED или ACTION_CONNECTION_STATE_CHANGED, даже если я намеренно включаю и выключаю Bluetooth. Естьпотому что это происходит в другом сервисе? есть ли способ обойти это?

...