2017-02-13 90 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); 

與完全限定包名第二種方法我還沒有測試,但它應該工作,我認爲。