【问题标题】:Android notification is not working properly with AlarmManagerAndroid 通知无法与 AlarmManager 一起正常工作
【发布时间】:2019-05-10 15:22:37
【问题描述】:

我想每天在指定时间在我的应用程序中显示通知,通知工作正常。当我第一次启动我的应用程序时,无论何时我都会收到通知,当我单击该通知时,它会将我带到 DetailActivity ,当我单击后退按钮进入 MainActivity 时,会创建另一个通知。我尝试了所有我能想到的方法,但没有任何效果。

附:这是我第一次使用通知和 AlarmManager。

这是我来自 MainActivity.java 的代码

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    rvWord = findViewById(R.id.recyclerview);
    rvWord.setLayoutManager(new LinearLayoutManager(getApplicationContext()));

    mDBHelper = new DatabaseHelper(this);

    dictionaryAdapter = new DictionaryAdapter();
    dictionaryAdapter.setCursor(mDBHelper.getDictionaryWord(""));
    rvWord.setAdapter(dictionaryAdapter);

    // Show banner ads
    mAdView = findViewById(R.id.adView);
    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);

    showTimedNotification(this); // Shows Notification

    showRatingDialog(); // Shows Rating Dialog

    DrawerLayout drawer = findViewById(R.id.drawer_layout);
    NavigationView navigationView = findViewById(R.id.nav_view);
    ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
    drawer.addDrawerListener(toggle);
    toggle.syncState();
    navigationView.setNavigationItemSelectedListener(this);

}
private void showTimedNotification(Context context) {

    Calendar updateTime = Calendar.getInstance();
    updateTime.set(Calendar.HOUR_OF_DAY, 8);
    updateTime.set(Calendar.MINUTE, 5);
    updateTime.set(Calendar.SECOND,10);

    Intent intent = new Intent(context, AlarmReceiver.class);

    PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
            0, intent, PendingIntent.FLAG_UPDATE_CURRENT);

    AlarmManager alarms = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
    alarms.setInexactRepeating(AlarmManager.RTC_WAKEUP, updateTime.getTimeInMillis(),
            AlarmManager.INTERVAL_DAY, pendingIntent);

}

【问题讨论】:

    标签: android notifications alarmmanager android-notifications android-alarms


    【解决方案1】:

    我使用AlarmManager 已经有一段时间了,但是这可能是因为您将triggerAtMillis 参数设置为当前日期,时间为08:05:10,并且在过去的情况下,它触发警报?

    每次进入 MainActivity onCreate 时,Alarm 都会再次安排在同一时间,从而重新触发 Alarm?

    您可以尝试添加: updateTime.add(Calendar.DAY_OF_YEAR, 1); 安排闹钟让它在明天早上 8 点响起时。

    如果您想彻底,您可以检查当前时间是否在上午 8 点之前(00:00 和 08:00 之间),如果是在上午 8 点之后,则仅添加额外的一天,但试试这个,看看它是怎么回事去。

    【讨论】:

    • 我想在每天早上 8 点显示通知,请告诉我该怎么做
    • 好吧,您为通知所做的一切都是正确的,但问题是它触发得有点早。我将编辑我的答案以反映这一点:)
    • @John 更新了答案,建议在触发时间上增加 1 天
    • 我会尝试你的解决方案并让你知道
    • 它工作得很好,但不是 08:05,而是在 09:08 发出警报
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-14
    • 2020-08-19
    相关资源
    最近更新 更多