Это не относится к телефонам Huawei, это касается версии ОС Android.
С момента выпуска Android 26 (Oreo). Google решил установить жесткие ограничения на разрешения, а также некоторые разрешения не были предоставлены.
По сути, я хотел бы предложить вам больше узнать о Google Oreo и более поздних политиках разрешений.
У меня тоже была твоя проблема. Мое приложение отлично работает на Android ниже 26, но после этого я столкнулся с большой катастрофой и сейчас работаю над этим, чтобы справиться с этим для новых пользователей Android-версии.
наконец, вы должны адаптироваться к текущей политике Google, в противном случае вам нужно принять решение SHIFT + DELETE.
Редактировать
Уточнение: мой сервис является приоритетным, с постоянным
уведомление. Он может хорошо работать в течение ДНЕЙ на других устройствах.
Как вы пояснили, жизненный цикл вашего приложения продолжается, когда приложение закрывается.
До Android.O
Вы можете запустить службу на getApplicationContext.startService(YOUR_INTENT_SERVICE)
, но после Android.O
, как указано в документации Google здесь вы должны использовать IntentService вместо Сервис . Вам следует enqueueWork
В противном случае ваш сервис не будет запущен.
а также, недостаточно для безопасного запуска службы, вы должны запланировать периодический запуск службы. потому что, когда приложение закрыто, ваш сервис переходит в черный список и будет закрыт как можно скорее OS .
После того, как Сервисы Android.O находятся в белом списке , когда приложение открыто и взаимодействует с пользователем, в противном случае оно переходит в черный список и будет закрыто для освобождения ресурсов для распределения. другими высокоприоритетными приложениями.
Вот фрагмент кода, который поможет вам преодолеть проблему.
public class job extends JobService {
@Override
public boolean onStartJob(JobParameters params) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (!isMyServiceRunning(this, YourService.class)) {
YourService.enqueueWork(this, YourService.class, 1000, new Intent());
}
} else {
if (!isMyServiceRunning(this, YourService.class)) {
Intent service = new Intent(this, YourService.class);
this.startService(service);
}
}
ScheduledWork.scheduleJob(this);
return true;
}
@Override
public boolean onStopJob(JobParameters params) {
jobFinished(params, true);
return false;
}
Выше кода - запланированное задание , которое будет вызываться в минуту и повторно запланировано снова.
Затем проверяет версию ОС и пытается start service
или ввести ее в enqueueWork