2017-02-15 4 views
0

onStartCommand()에서 서비스에 보류중인 인 텐트를 전달하려고합니다. 그러나 일단 알람이 설정되면 계속해서 트리거됩니다. 오전 4시와 오후 8시에 두 개의 경보를 설정하고 있습니다. 나는 오전 4시에 알람을 보낼 의도가 생기면 오후 8시에 알람을 설정해야하고 오후 8시에 알람을 보낼 의도가있을 때 오전 4시 알람을 설정해야한다는 논리를 달성하고자했습니다. 그러나 예기치 않게 작동하고 있습니다. 오후 8시 의도가 전달되면 4 초 안에 오전 8시에 다시 알람을 설정하는 오전 4시에 대한 의도가 전달되고이주기가 반복됩니다. 어디서 실수합니까? 제발 나를 안내 해줘.시간이 다르기는하지만 알람 관리자가 계속 트리거합니다.

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

지금 당일 오전 4시 알람을 설정하고 있습니다. 4am은 다음날로 설정해야합니다 .. 예 : 오늘은 수요일입니다. 오후 8시에 알람이 실행됩니다. 다음 알람은 오전 4시 목요일에 설정해야합니다.

모든 먹으 렴 당신이 할 필요가 있으므로이뿐만 아니라 월말을 지원 (일정에 하루를 추가합니다.

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

을 그 여전히 지속적으로 순환. 난 이해가 안 –

+0

... 할 – Dus

+0

아니요 사용자 상호 작용없이 알람이 자동으로 설정되도록하려는 경우 –

관련 문제