Как надежно прослушивать системные трансляции и запускать сервисы в ответ? - PullRequest
0 голосов
/ 10 июля 2019

Я пишу приложение, которое прослушивает события Bluetooth, ACL_CONNECTED и ACL_DISCONNECTED, через широковещательный приемник и запускает некоторую работу с использованием службы.Однако я сталкиваюсь с двумя проблемами:

1) Приемник вещания не всегда получает эти намерения, особенно когда экран телефона некоторое время выключен 2) Служба не запускается надежно изшироковещательный приемник

Код работает нормально, когда я недавно открыл свое приложение на переднем плане.Тем не менее, чем дольше я жду (и особенно когда выключаю экран телефона), 1) и 2) больше не происходит надежно.

Вот мой вещательный приемник:

public class BluetoothConnectedReceiver extends BroadcastReceiver {
    private static final String TAG = "BluetoothReceiver";

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "bluetoothreceiver received event");
        String action = intent.getAction();
        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
        Context applicationContext = context.getApplicationContext();

        if (device.getBluetoothClass().getMajorDeviceClass() == BluetoothClass.Device.Major.AUDIO_VIDEO) {
            if (BluetoothDevice.ACTION_ACL_CONNECTED.equals(action)) {
                Log.d(TAG, "Received intent with acl connected");
                Intent i = new Intent(context, BluetoothDetectionService.class);
                i.setAction(BluetoothDetectionService.ACTION_HEADSET_ON);
                applicationContext.startService(i);
            } else if (BluetoothDevice.ACTION_ACL_DISCONNECTED.equals(action)) {
                Log.d(TAG, "Received intent with acl disconnected");
                Intent i = new Intent(context, BluetoothDetectionService.class);
                i.setAction(BluetoothDetectionService.ACTION_HEADSET_OFF);
                applicationContext.startService(i);
            }
        }
    }
}

И вВ моем сервисе у меня есть оператор печати в onStartCommand.

Иногда я получаю только операторы печати от получателя широковещательной рассылки, такие как «Полученное намерение с подключенным acl», но нет оператора печати из сервиса.В других случаях я даже не получаю заявление на печать от приемника вещания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...