2017-02-15 3 views
0

保留中のインテントをonStartCommand()内のサービスに配信しようとしています。しかし、アラームが設定されると、それは継続的にトリガされます。私は午前4時と午後8時にそれぞれ2つのアラームを設定しています。私は、午前4時に警報を出す予定が午後8時に設定され、午後8時に警報が意図されたときに午前4時に警報が設定されるような論理を実現したいと考えました。しかし、予期せず動作しています。午後8時のインテントが配信されると、4秒で4 AMのインテントが配信され、午後8時にアラームが設定され、このサイクルが繰り返されます。 ここで私は間違いをしていますか?私を案内してください。時間が異なるのに、アラームマネージャが連続的にトリガーします

public class Alarmclass extends Service { 
@Nullable 
@Override 
public IBinder onBind(Intent intent) { 
    return null; 
} 

private String Stat; 

private boolean GetTypeofAlarm() { 
    Log.e("Getting type", "Getting alarm types"); 
    boolean alarmtype = false; 
    int hours; 
    Calendar c = Calendar.getInstance(); 
    hours = c.get(Calendar.HOUR_OF_DAY); 
    if (hours <= 5) { 
     alarmtype = false; 
    } else if (hours >= 20) { 
     alarmtype = false; 
    } else if (hours >= 5 && hours <= 20) 
     alarmtype = true; 
    return alarmtype; 
} 


@Override 
public void onCreate() { 
    super.onCreate(); 

    if (!GetTypeofAlarm()) { 
     StartLocAlarm(); 
    }else{ 
     StopLocAlarm(); 
    } 
    } 

    @Override 
public int onStartCommand(Intent intent, int flags, int startId) { 

    if (intent.hasExtra("START")) {    

    if(intent.getStringExtra("START").equals("START_ALR")) { 
      StopLocAlarm(); 
     } 
    }else if(intent.hasExtra("STOP")){ 
     if(intent.getStringExtra("STOP").equals("STOP_ALR")) { 
     StartLocAlarm(); 
    } 
    } 

    Intent Actint = new Intent(this, Startup_Activity.class); 
    Actint.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 
      | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 2422, Actint, 0); 

    Notification notification = new NotificationCompat.Builder(this) 
      .setContentTitle("Admin") 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setContentIntent(pendingIntent) 
      .setContentText(Stat) 
      .setOngoing(true).build(); 
    startForeground(201, notification); 

    return START_STICKY; 
} 

private void StartLocAlarm(){ 

    AlarmManager alrmMgr; 
    PendingIntent alarmIntent; 

    Calendar c = Calendar.getInstance(); 
    c.setTimeInMillis(System.currentTimeMillis()); 
    c.set(Calendar.HOUR_OF_DAY, 4); 
    alrmMgr = (AlarmManager)this.getSystemService(Context.ALARM_SERVICE); 
    Intent intent = new Intent(this, Alarmclass.class); 
    intent.putExtra("START", "START_ALR"); 
    alarmIntent = PendingIntent.getService(this, 0, intent, 0); 


    alrmMgr.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),alarmIntent); 
    Log.e("In onstart","Setting alarm at 5 AM"); 
    Stat = "Alarm set for 5 AM"; 

} 

private void StopLocAlarm(){ 

    AlarmManager alarmMgr; 
    PendingIntent alarmIntent; 

    Calendar c = Calendar.getInstance(); 
    c.setTimeInMillis(System.currentTimeMillis()); 
    c.set(Calendar.HOUR_OF_DAY, 20); 
    alarmMgr = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE); 
    Intent intent2 = new Intent(this, Alarmclass.class); 
    intent2.putExtra("STOP", "STOP_ALR"); 
    alarmIntent = PendingIntent.getService(this, 1, intent2, 0); 

    alarmMgr.set(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), alarmIntent); 
    Log.e("In onstart", "Setting alarm at 8 PM"); 
    Stat = "Alarm set for 8 PM"; 
} 


} 

答えて

0

あなたは今現在の4amアラームを設定しています。午前4時は翌日に設定する必要があります。 たとえば、今日は水曜日です。午後8時にアラームが起動します。あなたは次のアラームが午前4時に木曜日に設定されるべきです。

あなたがする必要があるすべてのthatsので、これは、同様月末をサポートしています(自分のカレンダーに毎日追加。

c.add(Calendar.DAY_OF_MONTH, 1); //Adding 1 day 
+0

そのはまだ継続的にサイクリング。私は理解していない –

+0

...やります – Dus

+0

いいえユーザーとのやりとりなしに自動的にアラームを設定したい場合は –

関連する問題