2011-10-07 4 views
3

내 응용 프로그램이 실행 중일 때마다 5 분 간격으로 화재 경보 관리자를 서비스하고 싶습니다. 어떻게해야합니까?매 5 분마다 화재 경보 관리자

Intent intent = new Intent(this, OnetimeAlarmReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, REQUEST_CODE, intent, 0); 

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + (5 * 1000), sender); 
    Toast.makeText(this, "Alarm set", Toast.LENGTH_LONG).show(); 
+1

왜 서비스가 필요합니까? 5 분마다 경고음을 울리려면 서비스가 필요하지 않습니다. –

답변

7

이 시도 :

alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), 5*60*1000, pendingIntent); 

당신이 그것을 취소 할 때까지이 이벤트를 얻고 그것을 취소해야하는 그래서 알람이 영원히 반복 될 것 당신이 더 이상 그것을 필요로하지 않을 때.

+1

실행중인 서비스를 중지하는 방법? 앱에서 나가면 – shyam

+0

stopService()를 사용하십시오 ..... 오류가 있습니까? –

+0

잘 작동합니다 .... 덕분에 – shyam

2
private class ProgressTimerTask extends TimerTask { 
     @Override 
     public void run() { 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 
        // set your time here 
        int currenSeconds = 0 
        fireAlarm(currenSeconds); 
       } 
      }); 
     } 
    } 

Inizialize :

 Timer progressTimer = new Timer(); 
    ProgressTimerTask timeTask = new ProgressTimerTask(); 
    progressTimer.scheduleAtFixedRate(timeTask, 0, 1000); 
+0

서비스에서 작동하지 않습니다.이 이유를 확인하려면 http://stackoverflow.com/questions/14924295/service-of-an-app-stops-when-phone-is-not-being-charged을 클릭하십시오. – HiB

+1

전화가 절전 모드에 있습니다. – Yahor10

2

해당 활동의 onPause()에있는 AlarmManager을 취소하십시오.

더 나은 해결책은 postDelayed(Runnable r, 5000)으로 Handler을 사용하는 것입니다. 이는 애플리케이션이 실행 중일 때만 말했기 때문입니다. 이 경우 AlarmManager을 사용하는 것보다 Handlers이 훨씬 효율적입니다.

Handler myHandler = new Handler(); 
Runnable myRunnable = new Runnable(){ 
    @Override 
    public void run(){ 
     // code goes here 
     myHandler.postDelayed(this, 5000); 
    } 
} 

@Override 
public void onCreate(Bundle icicle){ 
    super.onCreate(icicle); 
    // code 
    myHandler.postDelayed(myRunnable, 5000); 
    // to start instantly can call myHandler.post(myRunnable); instead 
    // more code 
} 

@Override 
public void onPause(){ 
    super.onPause(); 
    // code 
    myHandler.removeCallbacks(myRunnable); // cancels it 
    // code 
} 
+0

서비스에서 작동하지 않습니다, 이것을 확인하십시오 http://stackoverflow.com/questions/14924295/service-of-an-app-stops-when-phone-is-not-being-charged) 그 이유는 – HiB

+1

입니다. 이것은 서비스에서 실행하기위한 것이 아닙니다. 그는 앱이 실행 중일 때만 5 분마다 ** 호출하는 방법을 묻고있었습니다 **. 다른 대답이 말하는 것처럼 서비스를 시작하는 것이 과잉이었을 것입니다. – DeeV

관련 문제