Android - 应用程序关闭后,AlarmManager 不工作

Har*_*hra 5 android alarmmanager

我正在使用AlarmManager在某个时间调用一个函数。它在 Genymotion Emulator 中成功运行,但在真实设备(如 Redmi、Honor 等)中无法运行。这是代码。

     Intent intent = new Intent(CreateContact.this, DeleteContactReceiver.class);
     intent.putExtra("name", name.getText().toString());
     intent.putExtra("phone", phoneNumber.getText().toString());
     PendingIntent pendingIntent = PendingIntent.getBroadcast(
                                getApplicationContext(), (int) System.currentTimeMillis(), intent, 0);
    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis()
                                + (selected * 60000), pendingIntent);
Run Code Online (Sandbox Code Playgroud)

min SDK版本21

编辑:我尝试使用setAndAllowWhileIdle但它仍然无法正常工作。

有什么建议?

Per*_*abs 6

使用 androidx WorkManager库代替所有调度服务。

WorkManager API 是所有以前的 Android 后台调度 API 的合适且推荐的替代品

https://developer.android.com/topic/libraries/architecture/workmanager

WorkManager所做的就是包装所有现有的调度服务,并根据可用的、API 级别等使用最合适的服务,甚至照顾兼容性问题和系统 bug

一些教程:

https://medium.com/androiddevelopers/introducing-workmanager-2083bcfc4712

https://www.programmerought.com/article/82731596284/

https://medium.com/swlh/periodic-tasks-with-android-workmanager-c901dd9ba7bc


Dav*_*ser 5

在某些设备上(特别是低端设备和中国制造商),应用程序不允许执行后台功能(如果应用程序未运行),除非用户明确启用此功能。这是为了防止恶意应用程序通过执行后台活动来耗尽电池。

要解决此问题,您需要手动将应用程序添加到“受保护的应用程序”列表或“允许在后台运行”的应用程序列表。要将您的应用程序添加到此列表,您需要转到适当的设置。这在不同的设备上有所不同,但通常可以在“电源管理”或“安全”设置中找到。

在荣耀设备上,可以在“电池管理器->受保护的应用程序”中找到它

对于小米设备,请参阅https://dontkillmyapp.com/xiaomi