Уведомление Android не работает должным образом с AlarmManager - PullRequest
2 голосов
/ 10 мая 2019

Я хочу, чтобы уведомления в моем приложении ежедневно в указанное время, Уведомления работают нормально.Когда я запускаю свое приложение в первый раз, независимо от того, который час, я получаю уведомление, и когда я нажимаю на это уведомление, оно переводит меня в DetailActivity, когда я нажимаю кнопку «Назад», чтобы перейти к MainActivity, создается другое уведомление.Я перепробовал все, что мог придумать, но ничего не работает.

PS Я впервые с уведомлениями и 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);

}

1 Ответ

0 голосов
/ 10 мая 2019

Прошло много времени с тех пор, как я использовал AlarmManager, но это могло произойти, потому что вы устанавливаете параметр triggerAtMillis на текущую дату со временем 08:05:10, а в тех случаях, когда это происходит в прошлом, это срабатывает будильник?

Каждый раз, когда вы вводите MainActivity onCreate Будильник снова включается на одно и то же время, таким образом, повторное срабатывание будильника?

Вы можете попробовать добавить: updateTime.add(Calendar.DAY_OF_YEAR, 1); При планировании будильника, чтобы он сработал завтра в 8 утра.

Если вы хотите быть внимательным, вы можете проверить, является ли текущее время до 8:00 (между 00:00 и 08:00), и добавить дополнительный день, только если это после 8:00, но попробуйте это и посмотрите, как оно идет.

...