Запуск действия по событию AlarmManager с широковещательного приемника

#android #android-activity #broadcastreceiver #alarmmanager

Вопрос:

У меня есть диспетчер аварийных сигналов, с помощью которого я устанавливаю время для запуска, предоставляя широковещательный приемник, onReceive метод успешных вызовов широковещательного приемника, но есть идеи, как запустить приложение, onReceive если приложение не запущено на переднем плане?

Менифест

 <receiver
    android:exported="true"
    android:name=".AlarmReceiver" />
 

Приемник вещания

   @Override
    public void onReceive(Context context, Intent intent)
    {
        Intent scheduledIntent = new Intent(context, MainActivity.class);
        scheduledIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(scheduledIntent);
    }
 

Основная деятельность

         AlarmManager alarmManager=(AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Intent intent=new Intent(this,AlarmReceiver.class);
        PendingIntent pendingIntent=PendingIntent.getBroadcast(this,1000,intent,0);
        alarmManager.set(AlarmManager.RTC_WAKEUP,timeInMillis,pendingIntent);
 

Пожалуйста, помогите
Спасибо

Комментарии:

1. Вы не можете запустить действие в фоновом режиме в современных версиях Android. Пожалуйста, используйте Notification вместо этого приоритет.

2. Спасибо @CommonsWare за быстрый ответ, что вы предлагаете использовать, если я хочу автоматически воспроизводить запланированный музыкальный поток? Во-вторых , как вы предложили использовать уведомление с высоким приоритетом , будет ли это локальное уведомление или push-уведомление, и могу ли я запустить действие a из push-уведомления? Спасибо

3. «что вы предлагаете использовать, если я хочу автоматически воспроизводить запланированный музыкальный поток?» — если бы это было что-то похожее на мелодию звонка, вы, возможно, могли бы привязать ее непосредственно к Notification . Если это что-то более длинное, попросите Notification предоставить пользовательский интерфейс для переднего Service плана, который воспроизводит поток. «будет ли это локальное уведомление или push-уведомление» — Notification на Android относится к тому, что, я полагаю, вы подразумеваете под»локальным уведомлением». «могу ли я запустить действие a из push-уведомления?» — нет.

4. По сути , это музыкальный поток радио с использованием exoplayer , нам нужно, чтобы пользователь установил время, в которое он хочет, чтобы он воспроизводился, и когда это время наступит, поток начнет воспроизводиться автоматически . У меня на уме две вещи: либо фоновое, либо переднее обслуживание.

Ответ №1:

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

Фоновая служба будет работать только в течение одной минуты на Android 8.0 . Для музыкального проигрывателя вам понадобится служба переднего плана, в которой связанный Notification с ней пользователь управляет воспроизведением (например, пауза, возобновление, остановка).

Комментарии:

1. Спасибо, мне понадобится немного больше помощи, мое требование-показать уведомление о способе приема широковещательной передачи, и это уведомление может транслировать музыкальный поток. Метод музыкального потока записывается в основном действии , но когда в это время вызывается приемник onReceive широковещательной передачи, ни один метод основного действия не вызывается, потому что он не находится на переднем плане. Нужна помощь, спасибо

2. @AliAkram: «Метод музыкального потока записан в основной деятельности» — это не сработает. Вам нужно будет переместить логику музыкального потока в какой-то отдельный элемент, которым вы можете управлять из действия (когда оно рядом), из службы переднего плана (когда оно рядом) или, возможно, из трансляций Notification (когда оно рядом).

Ответ №2:

Вопервых, вы также должны использовать WorkManager, Brodcastreciver имеет ограничения для разных версий Android.