Как запустить фоновый сервис в Android O каждую минуту? - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть старое приложение, в котором служба вызывается с использованием AlarmManager setExact каждую минуту, но в последней версии 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, тогда мое приложение будет работать неправильно.

1 Ответ

0 голосов
/ 24 сентября 2018

Вы можете использовать диспетчер тревог, который будет вызываться через каждые 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>

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

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