Android Alarmmanager重复不需要的东西

时间:2017-02-13 16:15:02

标签: android alarmmanager

我想将AlarmManager设置为每24小时重复一次,但我的代码不起作用。

我在MainActivity中设置AlarmManager以使用AlarmReceiver触发弹出通知,AlarmReceiver将意图发送给MainActivity。

我还检查AlarmManger是否已设置,但是当我不使用在我的代码中取消注释(###)的alarmIntent2时,它总是返回false。 如果我使用alarmIntent2然后我没有得到通知,则AlarmManager未正确设置。

每次调用MainActivity时,都会再次设置AlarmManager。

我做错了什么? 感谢。

MainActivity.class

MainActivity extends ListActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);


    Intent myIntent  = this.getIntent();
    if(myIntent.getExtras() != null) {
        String nid = myIntent.getExtras().containsKey("nid") ? myIntent.getExtras().getString("nid") : "-";
        if(nid.equals("1234")) {
            startFragmentActivityToShowMessage();
        }
        else {

            addNotification();
        }

    }
}


private void addNotification() {
        boolean alarmUp = false;
        alarmUp = (PendingIntent.getBroadcast(this, 0,
                new Intent("com.mypackage.AlarmReceiver.class"),
                PendingIntent.FLAG_NO_CREATE) != null);
        if(!alarmUp) {

            Calendar calendar = Calendar.getInstance();
            calendar.setTimeInMillis(System.currentTimeMillis());
            calendar.set(Calendar.HOUR_OF_DAY, 8);
            calendar.set(Calendar.MINUTE, 15);
            calendar.set(Calendar.SECOND, 01);

            Intent alarmIntent = new Intent(this, com.mypackage.AlarmReceiver.class);
            // (###) Intent alarmIntent2 = new Intent("com.mypackage.AlarmReceiver.class"); (###)
            PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
            AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
            alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 60* 24, pendingIntent);

        }
    }

1 个答案:

答案 0 :(得分:0)

欧客。我解决了

中的意图
PendingIntent.getBroadcast(this, 0, alarmIntent,..)

必须以同样的方式创建。然后我可以检查是否已设置AlarmManager。这解决了问题。

示例:

Intent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class);

Intent alarmIntent = new Intent("com.mypackage.AlarmReceiver.class");

通过这种方式,下面的检查工作正常。

    Intent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class);
boolean alarmUp = false;
    alarmUp = (PendingIntent.getBroadcast(this, 0,
            alarmIntent,
            PendingIntent.FLAG_NO_CREATE) != null);

Intent alarmIntent = new Intent(MainActivity.this, AlarmReceiver.class);

        PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
        alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 1000 * 60 * 60* 24, pendingIntent);

使用完全限定的包名称的第二种方法我还没有测试过,但我认为它应该可行。