2013-05-10 5 views
0

을 호출 할 수있는 응용 프로그램이 있습니다.이 응용 프로그램에서 x 분마다 자동으로 이러한 알림을 보내고 싶습니다 (예 : 15 분이 기본값 임). 이 알림을 보내야 할 때 앱이 현재 실행 중이거나 실행 중이 아닐 수도 있습니다.매 x 분마다

일부 내용을 읽은 후에 AlarmManager가 여기에 사용되는 것으로 판단되었지만 그 중 하나에서 메소드를 호출하는 방법을 알 수는 없습니다. 알림 코드가 이미 있습니다. x 분마다 호출하는 방법이 필요합니다.

저는 매우 새로운데, 이것은 제 첫 번째 연습 응용 프로그램입니다 (C#에서는 경험이 있지만 Java에서는 거의 사용하지 않습니다).

감사합니다. David.

답변

3

이 같은 것을 고려할 수 있습니다 : 당신이 불분명 한 경우

Intent intent = new Intent(this, MyService.class); 
PendingIntent pintent = PendingIntent.getService(this, 0, intent, 0); 

AlarmManager alarm = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
// Start every 30 seconds 
alarm.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), 30*1000, pintent); 

+0

감사합니다, 내 MainActivity.class에 내 메서드가 있으면 어떻게 작동해야합니까? 서비스에서이 메서드를 호출해야합니까? 아니면 리팩터링하여 해당 클래스를 리팩토링하고 해당 인스턴스를 만들어야합니까? –

+0

위에 링크 된 튜토리얼을 읽었습니까? 해야 할 일이 몇 가지 있습니다. AndroidManifest.xml에 서비스를 등록하십시오. 구현 클래스 (위의 예제에서 MyService)는 Service 클래스 또는 그 서브 클래스 중 하나를 확장해야합니다. 먼저 자습서를 살펴보고 샘플 코드 중 일부가 포함되어 있습니다. –

+0

예제를 읽었지만 서비스에서 내 알림 메서드를 호출하는 방법을 여전히 완전히 이해하지 못하고 있습니까? –

0

IntentService 쓰기 this 튜토리얼을 통해 이동합니다. 그 안에 새로운 Thread을 시작하십시오. 당신이 방법 alarm.setRepeating(...)와 플래그 AlarmManager.RTCAlarmManager.RTC_WAKEUP를 사용하지 않는 지정된 간격으로 작업을 예약하려면 루프 알림 코드와 Thread.sleep(15 * 60 * 1000) ....

0

를 호출하는 동안 Thread.run()에서 무한을 넣어. 이 경우 알람은 장치의 실시간 시계에 묶여 있기 때문입니다. 따라서 시스템 시간을 변경하면 경보가 오작동 할 수 있습니다. 플래그 AlarmManager.ELAPSED_REALTIME 또는 AlarmManager.ELAPSED_REALTIME_WAKEUP을 사용해야합니다. 이 경우 SystemClock.elapsedRealtime()은 경보를 예약하기위한 기초로 사용됩니다.

코드는 다음과 같이 표시됩니다 당신이 당신의 장기 실행 작업이 실행되도록하려면

alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + checkIntervalMillis, checkIntervalMillis, pendingIntent); 

때 나는 WakefulIntentService의 CommonsWare하여 라이브러리를 사용하는 것이 좋습니다 슬립 모드에서 디바이스 : 이것에 대한 https://github.com/commonsguy/cwac-wakeful

관련 문제