Android AlarmManager не работает, когда приложение закрыто на эмуляторе - PullRequest
0 голосов
/ 27 января 2019

Я гуглил эту тему, искал везде, ответ не работал.

Проблема:

В эмуляторе (API 27) и в моей заметке 8 в обоих:Я запускаю свое приложение с помощью android studio, в SettingsActivity нажимаю кнопку сброса, AlarmManager настроен на 2 минуты позже.Через 2 минуты уведомление отправляется в точное время, затем настраивается AlarmManager на 2 минуты позже, и так далее ... все в порядке.

Но когда я закрыл свое приложение, ничего не происходитРабота.нет записи в журнале, нет ошибки, нет уведомления или еще.

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

Здесь мои конфигурации:

Манифест:

...
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CLEAR_APP_CACHE" tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
...
<service
        android:name=".service.ServiceTest"
        android:enabled="true"
        android:exported="false"
        android:icon="@drawable/ic_launcher"
        android:label="Service Test" />
...

ServiceTest расширяет Сервис:

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

    NotificationUtil.sendNotification(getApplicationContext());
    Apps.alarmSet(getApplicationContext(), ServiceTest.TAG);

    stopSelf(startId);

    return super.onStartCommand(intent, flags, startId);
}

SettingsActivity-> ResetButton setOnClickListener:

Apps.alarmSet(getApplicationContext(), SettingsActivity.TAG);

ПриложенияКласс AlarmSet метод:

public static void alarmSet(Context context, String triggerName) {
    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
    calendar.setTimeInMillis(calendar.getTimeInMillis() + 120000L); // 2 min later
    calendar.set(Calendar.SECOND, 0);
    calendar.set(Calendar.MILLISECOND, 0);

    AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(context, ServiceTest.class);
    PendingIntent pendingIntent = PendingIntent.getService(context, ServiceTest.SERVICE_ID, intent, PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_UPDATE_CURRENT);

    if (alarmManager != null && pendingIntent != null) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
        } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
        } else {
            alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
        }

        SmartLogger.appendLog(context, triggerName, "Alarm is setupped : " + DateUtil.millisToFormattedDate(calendar.getTimeInMillis(), "dd.MM.yyyy HH:mm"));
    } else {
        SmartLogger.appendLog(context, triggerName, "AlarmManager or PendingIntent is null");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...