Невозможно запустить приемник: Запрещено запускать сервис. Приложение в фоновом режиме - PullRequest
0 голосов
/ 28 марта 2020

Итак, я создал приложение, которое по нажатию кнопки настраивает повторяющуюся задачу с помощью Alarm Manager.

При создании:

Intent alarmIntent = new Intent(this, AlarmReceiver.class);
servicePendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, 0);

При нажатии кнопки:

alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);

    firingCal= Calendar.getInstance();
    firingCal.setTimeInMillis(System.currentTimeMillis());
    firingCal.set(Calendar.HOUR_OF_DAY, 1); // At the hour you want to fire the alarm
    firingCal.set(Calendar.MINUTE, 47); // alarm minute
    firingCal.set(Calendar.SECOND, 0); // and alarm second
    long intendedTime = firingCal.getTimeInMillis();

    long interval = 1000 * 60 * 1;


    alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, intendedTime, interval, servicePendingIntent);

В классе AlarmReceiver:

public void onReceive(Context context, Intent intent) {

    Intent myIntent = new Intent(context, WallpaperService.class);

    context.startService(myIntent);
    Log.d(TAG,"Am apelat serviciul");

    context.stopService(myIntent);

}

А в классе WallpaperService я просто делаю запрос на получение и устанавливаю обои.

public class WallpaperService extends Service {

String requestLink="";
boolean requestFinished = false;
public final String TAG = "Service";
public  static int SERVICE_ID = 1;

@Override
public void onCreate() {
    super.onCreate();
    Log.d(TAG,"Wallpaper Service started");
    Toast.makeText(WallpaperService.this,"Service started",Toast.LENGTH_LONG);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    Log.d(TAG,"In onStartCommand");
    taskToBeRepeated();
    stopSelf();

    return START_STICKY;
}
.....
}

И поведение таково, что когда я запускаю приложение и нажимаю кнопку, все работает хорошо при первом срабатывании Alarm Manager (с приложением в фоновом режиме). Во второй раз, когда получатель срабатывает, я получаю ошибку в тайле. Чтобы быть более точным c:

java .lang.RuntimeException: невозможно запустить приемник com.example.dailywallpaper.AlarmReceiver: java .lang.IllegalStateException: не разрешено запускать службу Намерение {cmp = com.example.dailywallpaper / .WallpaperService}: приложение находится в фоновом режиме.

В чем проблема? А почему работает первый раз и потом выдает ошибку? Как я могу это исправить?

1 Ответ

0 голосов
/ 28 марта 2020

вам нужно прочитать android официальную документацию о политике использования фонового сервиса или аварийных сигналов в android 8 и выше и адаптировать ваше приложение с этими ограничениями.

Я предлагаю вам прочитать эти две статьи очень осторожно:

https://developer.android.com/guide/components/services

https://developer.android.com/about/versions/oreo/background

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