2017-02-13 50 views
1

我想设置AlarmManager重复每24小时但我的代码不起作用。Android Alarmmanager重复不需要

我在MainActivity中设置AlarmManager以使用AlarmReceiver触发弹出通知,该通知将Intent发送到MainActivity。

我还检查AlarmManger是否设置了它,但是当我不使用alarm代码2时,它会被我的代码中的(###)取消注释。 如果我使用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); 

     } 
    } 

回答

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); 

与完全限定包名第二种方法我还没有测试,但它应该工作,我认为。