Я пишу приложение, которое прослушивает события 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», но нет оператора печати из сервиса.В других случаях я даже не получаю заявление на печать от приемника вещания.