简体   繁体   English

"AlarmManager 在 Android 8.1.0 中不起作用"

[英]AlarmManager not working in Android 8.1.0

My requirement is set Notification<\/code> for specific time like user birthday or holiday我的要求是设置特定时间的Notification<\/code> ,例如用户生日或假期

I am using AlarmManager<\/a><\/strong> for scheduling notification using broadcast receiver我正在使用AlarmManager<\/a><\/strong>使用广播接收器来安排通知

Code is working fine in 6.0<\/code> (even when app is killed,swiped from recent list) but not working on Android 8.1.0<\/code> (Mf : Oppo)代码在6.0<\/code>中运行良好(即使应用程序被杀死,从最近的列表中滑动)但在Android 8.1.0<\/code>上无法运行(Mf:Oppo)

Readed This<\/a> and This<\/a> and many answers but not find any helpfull any idea how to solve this issue阅读了这个<\/a>和这个<\/a>以及许多答案,但没有找到任何有用的任何想法如何解决这个问题

Here is my code这是我的代码

    AlarmManager am = (AlarmManager) getApplicationContext().getSystemService(Context.ALARM_SERVICE);

    //creating a new intent specifying the broadcast receiver\

    Intent i = new Intent(this, HolidayBroadcast.class);
    i.putExtra("eventName",islamicHoliday.getEventName());
    i.putExtra("dateH", testTmp.getCalendar().getTimeInMillis());
    i.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
    //creating a pending intent using the intent
    PendingIntent pi = PendingIntent.getBroadcast(this, new Random().nextInt(), i, PendingIntent.FLAG_UPDATE_CURRENT);


    //setting alarm
    if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.M) {
        am.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,getTimeInMillis(), pi);
    }
    else
    {
        am.setExact(AlarmManager.RTC_WAKEUP, getTimeInMillis(), pi);
    }

You can use workmanager as mentioned in link.It supports all api version and easy to use because it uses backward compatibility to API level 14 您可以使用链接中提到的workmanager,它支持所有api版本并且易于使用,因为它向后兼容API级别14

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

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

如果您的任务对时间要求很高,则不建议使用 WorkManager API,因为您的警报管理器无法正常工作,在 Android 8 上使用AlarmManager.setexactandallowwhileidle()<\/code>来设置准确时间并允许在应用程序被终止时发出唤醒通知。

"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM