2017-02-13 17 views
1

AlarmManagerを24時間ごとに繰り返し設定したいが、コードが機能しない。Android AlarmManagerが不要に繰り返す

MainActivityにAlarmManagerを設定し、IntentをMainActivityに送信するAlarmReceiverを使用してポップアップ通知をトリガーします。

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

     } 
    } 

答えて

0

おけ。私は解決した。

PendingIntent.getBroadcast(this, 0, alarmIntent,..) 

インテントは、同じように作成する必要があります。次に、AlarmManagerがすでに設定されているかどうかを確認できます。その解決された問題。

例:この方法をチェックすることで

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

または

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

以下で正常に動作します。 fullyqualifiedパッケージ名を持つ

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

第二の方法は、私はまだテストしていませんが、それは私が考えて動作するはずです。

関連する問題