2014-05-16 1 views
-1

고정 된 간격으로 특정 작업을 실행해야하는 앱을 만들려고합니다. 많은 연구와 노력을 한 후 서비스 내에서 타이머를 실행하는 대신 메모리 및 배터리 사용 효율 때문에 AlarmManager 클래스를 사용하는 것이 더 낫다고 생각했습니다.AlarmManager 클래스를 사용하여 일정 간격으로 작업을 올바르게 실행하는 방법은 무엇입니까?

제가 지금 문제가되는 부분이 있습니다.
하나는 이전 실행에서 생성 된 알람 객체를 취소 할 수 있도록 액세스해야합니까?

Intent intent = new Intent(getActivity(), MyService.class); 
PendignIntent pintent = PendingIntent.getService(getActivity(), 0, intent, 0); 
AlarmManager alarm = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE); 
alarm.setInexactRepeating(AlarmManager.RTC_WAKEUP, SystemClock.elapsedRealtime() + 
          20000, AlarmManager.INTERVAL_FIFTEEN_MINUTES, pintent); 

알람이 설정되었는지 알 수있는 방법이 있지만 알람 자체를 줄 수는 없습니다.

boolean alarmUp = (PendingIntent.getService(getActivity(), 0, new Intent(getActivity(), MyService.class), PendingIntent.FLAG_NO_CREATE) != null); 
if(alarmUp){ 
    //How to cancel the alarm 
}else { 
    Toast.makeText(getActivity(), "Alarm not running", Toast.LENGTH_SHORT).show(); 
} 

답변

1

예 youcan은 당신을 도울 것이다 시도 this-

AlarmManager am=(AlarmManager)getSystemService(ALARM_SERVICE); 

    Intent alarmintent1=new Intent(MainActivity.this, AlarmReceiver.class); 
    PendingIntent sender1=PendingIntent.getBroadcast(SpeedMotors.this, 100, alarmintent1, PendingIntent.FLAG_UPDATE_CURRENT | Intent.FILL_IN_DATA); 

    try { 
     am.cancel(sender1); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     System.out.println("ex....."+e); 
    } 

    Calendar cal=Calendar.getInstance(); 
    cal.add(Calendar.SECOND, 5); 


    am.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 1000*10, sender1); 
    System.out.println("alarm set..........."); 

처럼 PendingIntent에 따라 경보를 취소 할 수 있습니다.

1

경고 관리자의 등록 및 취소는 보류중인 의도를 기반으로합니다. 동일한 인수로 보류중인 인 텐트를 작성하면 동일한 알람에 액세스 할 수 있습니다.

관련 문제