2017-02-05 10 views
1

Я программирую приложение, которое подключается к устройству Bluetooth и используется в автомобиле (в фоновом режиме) и навигации (или что-то еще) на переднем плане.Как сохранить приложение в фоновом режиме

Но на android 7+ (возможно, также 6) приложение засыпает через некоторое время. Когда я пытаюсь сфотографироваться с камеры, «спящий режим» сразу же и мое приложение сейчас спал (нет соединения Bluetooth, никаких уведомлений) - просто мертвое приложение.

Мне нужно перейти к последним приложениям -> щелкнуть мышью по моему приложению, и это сделает «проснуться». Bluetooth теперь снова подключается к устройству.

Но я все еще не могу проверить, спал или нет приложение. Итак, как сохранить приложение также в фоновом режиме?

Я прочел некоторые о WakeLock, но похоже, что он не работает, потому что приложение все еще спят. Возможно, я использую это неправильно.

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); 
    wk = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, "MyWakeLock"); 
    wk.acquire(); 

и OnDestroy

wk.release(); 

Благодаря

+0

Может быть, вам нужна услуга –

ответ

2

С Android API 23 и далее, Google представила Doze mode и App Standby для экономии заряда аккумулятора. Когда устройство переходит в режим доз или приложение входит в App Standby, все задачи, выполняемые приложением, откладываются. У нас была проблема с сигналом тревоги, который не стрелял из-за того же. Если вы прочитаете документы, вы обнаружите, что использование Wake Lock также не поможет.

ограничения дремлют следующие ограничения применяются к приложениям, а в дремлют:

Доступ к сети приостановлена.

Система игнорирует блокировки слежения.

Стандартные аварийные сигналы AlarmManager (включая setExact() и setWindow()): отложены до следующего окна обслуживания. Если вам нужно установить аварийные сигналы , которые срабатывают при дозе, используйте setAndAllowWhileIdle() или setExactAndAllowWhileIdle(). Аварийные сигналы, установленные с помощью setAlarmClock(), продолжают , чтобы нормально срабатывать - система выходит из Doos незадолго до этих аварийных сигналов пожар.

Система не выполняет сканирование Wi-Fi.

Система не позволяет запускать адаптеры синхронизации.Система не позволяет JobScheduler запускать

Так что если вы хотите обойти все это, ваше приложение должно иметь процесс на переднем плане. Еще раз с того же док -

Приложение имеет процесс в настоящее время на переднем плане (либо в качестве деятельности или переднего плана обслуживания, или используется другой деятельности или службы переднего плана).

В вашем случае запустите службу и повысите приоритет переднего плана.

+0

Спасибо, помощник) ___ –

+0

Работало ли оно тогда для вас? – Dibzmania

+0

Да, мне просто нужно начатьForeground уведомление и это работа (мне нужно всегда показывать уведомление, если приложение находится в фоновом режиме, поэтому никаких проблем для меня) :-) –

0

почему бы вам не воспользоваться услугой? WakeLock в основном держит экран, на котором не является эффективным механизмом

https://developer.android.com/training/scheduling/wakelock.html

+1

Это не всегда держит экран на. Зависит от вида блокировки следа, приобретенного – Dibzmania

1

для wakelock работать, и должны добавить эту строку в свой файл androidmanifest в самом начале. но, как сказал Аджай, u должен использовать сервис, чтобы служба работала в фоновом режиме и выполняла эту работу, но если вы хотите сохранить экран на этом, то что-то еще, которое, я думаю, здесь не так.

<uses-permission android:name="android.permission.WAKE_LOCK" /> 
0

XML файл макета под тип макета:

андроид: keepScreenOn = «истинный»>

 Смежные вопросы

  • Нет связанных вопросов^_^