Как запускать фоновую службу в Android O каждую минуту?

У меня есть старое приложение, в котором служба вызывалась с использованием AlarmManagersetExact каждую минуту, но в последней версии Android O это не позволяет мне запускать службу таким же образом. Я не мог использовать службу переднего плана, потому что не хочу показывать никаких уведомлений, когда моя служба работает.

Мне нужна помощь в настройке архитектуры моего приложения таким образом, чтобы мой код работал в Android O с минимальными изменениями.

Когда я запускаю свое приложение на Android, происходит сбой :(. Найдите трассировку стека сбоя ниже.

java.lang.RuntimeException: Unable to create application com.***.***.***ControllerApplication: java.lang.IllegalStateException: Not allowed to start service Intent

Caused by: java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.***.***.qa/com.***.***.services.AlarmService

Редактировать:

Задача в моем приложении критична по времени, поэтому я использовал setExact в AlarmManager, но ни один из поддерживаемых в настоящее время API не планирует задания в точное время. С учетом сказанного, Если я использую JobScheduler / WorkManager, мое приложение будет работать неправильно.

использовать планировщик заданий

Faiz Mir 24.09.2018 11:22

Используйте планировщик заданий или менеджер работы

Mehta 24.09.2018 11:27

Диспетчер работ находится в альфа-версии, и планировщик заданий не может запланировать задание на точное время.

Syed Taruf Naqvi 24.09.2018 11:46
stackoverflow.com/questions/28062440/…
ॐ Rakesh Kumar 24.09.2018 12:43
1
4
493
1

Ответы 1

Вы можете использовать диспетчер сигналов тревоги, который будет вызываться каждые 10 минут.

        AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        Random random = new Random();
        int m = random.nextInt(9999 - 1000) + 1000;

        Intent notificationIntent = new Intent("android.media.action.DISPLAY_NOTIFICATION");
        notificationIntent.setClass(this,AlarmReceiver_.class);
        notificationIntent.addCategory("android.intent.category.DEFAULT");

        PendingIntent broadcast = PendingIntent.getBroadcast(YourClass.this, r5, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                SystemClock.elapsedRealtime() + 300000L,
                600000L, broadcast);

Код приемника ManiFest, на который вы получите ответ приемника

<receiver android:name = "com.yourpackage.AlarmReceiver_"

        >
        <intent-filter>
            <action android:name = "android.media.action.DISPLAY_NOTIFICATION" />
            <category android:name = "android.intent.category.DEFAULT" />
            <action android:name = "android.intent.action.QUICKBOOT_POWERON" />
            <action android:name = "android.intent.action.REBOOT" />
            <action android:name = "android.intent.action.BOOT_COMPLETED" />

        </intent-filter>
    </receiver>

Вам нужно будет создать Receiver, где вы будете получать данные как указанное выше имя AlarmReceiver_.class

Я уже использую AlarmManager, чтобы повторить задание, проблема в том, что запуск задания с помощью AlarmManager выдает исключение в Android O.

Syed Taruf Naqvi 24.09.2018 13:29

Не могли бы вы показать мне, как вы вызываете диспетчера аварийных сигналов?

ॐ Rakesh Kumar 24.09.2018 13:34

@SyedTarufNaqvi Ваша проблема решена, если нет, то дайте мне знать.

ॐ Rakesh Kumar 24.09.2018 16:01

Другие вопросы по теме