Android : AlarmManager 사용 방법
AlarmManager
설정 후 20 분 후에 코드 블록을 트리거해야합니다 .
누군가 AlarmManager
ِ Android에서 를 사용하는 방법에 대한 샘플 코드를 보여줄 수 있습니까 ?
나는 며칠 동안 코드를 가지고 놀았지만 작동하지 않을 것입니다.
"일부 샘플 코드"는 AlarmManager
.
다음은 설정을 보여주는 스 니펫입니다 AlarmManager
.
AlarmManager mgr=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent i=new Intent(context, OnAlarmReceiver.class);
PendingIntent pi=PendingIntent.getBroadcast(context, 0, i, 0);
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), PERIOD, pi);
이 예에서는 setRepeating()
. 원샷 알람을 원하면 set()
. 에 초기 매개 변수에서 사용하는 것과 동일한 시간축에 알람이 시작될 시간을 제공해야합니다 set()
. 위의 예에서는을 사용 AlarmManager.ELAPSED_REALTIME_WAKEUP
하고 있으므로 시간축은 SystemClock.elapsedRealtime()
.
다음은 이 기술을 보여주는 더 큰 샘플 프로젝트 입니다.
Android 샘플 코드에는 몇 가지 좋은 예가 있습니다.
. \ android-sdk \ samples \ android-10 \ ApiDemos \ src \ com \ example \ android \ apis \ app
확인해야 할 항목은 다음과 같습니다.
- AlarmController.java
- OneShotAlarm.java
먼저, 알람이 트리거 될 때 알람을들을 수있는 수신기가 필요합니다. AndroidManifest.xml 파일에 다음을 추가하십시오.
<receiver android:name=".MyAlarmReceiver" />
그런 다음 다음 클래스를 만듭니다.
public class MyAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, "Alarm went off", Toast.LENGTH_SHORT).show();
}
}
그런 다음 경보를 트리거하려면 다음을 사용하십시오 (예 : 기본 활동에서).
AlarmManager alarmMgr = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, MyAlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
Calendar time = Calendar.getInstance();
time.setTimeInMillis(System.currentTimeMillis());
time.add(Calendar.SECOND, 30);
alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent);
.
또는 더 나은 방법은 모든 것을 처리하는 클래스를 만들고 다음과 같이 사용하는 것입니다.
Bundle bundle = new Bundle();
// add extras here..
MyAlarm alarm = new MyAlarm(this, bundle, 30);
이렇게하면 모든 것을 한곳에 모을 수 있습니다 (를 편집하는 것을 잊지 마십시오 AndroidManifest.xml
).
public class MyAlarm extends BroadcastReceiver {
private final String REMINDER_BUNDLE = "MyReminderBundle";
// this constructor is called by the alarm manager.
public MyAlarm(){ }
// you can use this constructor to create the alarm.
// Just pass in the main activity as the context,
// any extras you'd like to get later when triggered
// and the timeout
public MyAlarm(Context context, Bundle extras, int timeoutInSeconds){
AlarmManager alarmMgr =
(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, MyAlarm.class);
intent.putExtra(REMINDER_BUNDLE, extras);
PendingIntent pendingIntent =
PendingIntent.getBroadcast(context, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);
Calendar time = Calendar.getInstance();
time.setTimeInMillis(System.currentTimeMillis());
time.add(Calendar.SECOND, timeoutInSeconds);
alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(),
pendingIntent);
}
@Override
public void onReceive(Context context, Intent intent) {
// here you can get the extras you passed in when creating the alarm
//intent.getBundleExtra(REMINDER_BUNDLE));
Toast.makeText(context, "Alarm went off", Toast.LENGTH_SHORT).show();
}
}
먼저 예약해야하는 인 텐트를 만들어야합니다. 그런 다음 해당 인 텐트의 pendingIntent를 가져옵니다. 활동, 서비스 및 방송을 예약 할 수 있습니다. 활동을 예약하려면 (예 : MyActivity) :
Intent i = new Intent(getApplicationContext(), MyActivity.class);
PendingIntent pi = PendingIntent.getActivity(getApplicationContext(),3333,i,
PendingIntent.FLAG_CANCEL_CURRENT);
Give this pendingIntent to alarmManager:
//getting current time and add 5 seconds in it
Calendar cal = Calendar.getInstance();
cal.add(Calendar.SECOND, 5);
//registering our pending intent with alarmmanager
AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(), pi);
Now MyActivity will be launched after 5 seconds of the application launch, no matter you stop your application or device went in sleep state (due to RTC_WAKEUP option). You can read complete example code Scheduling activities, services and broadcasts #Android
I wanted to comment but <50 rep, so here goes. Friendly reminder that if you're running on 5.1 or above and you use an interval of less than a minute, this happens:
Suspiciously short interval 5000 millis; expanding to 60 seconds
See here.
Some sample code when you want to call a service from the Alarmmanager:
PendingIntent pi;
AlarmManager mgr;
mgr = (AlarmManager)ctx.getSystemService(Context.ALARM_SERVICE);
Intent i = new Intent(DataCollectionActivity.this, HUJIDataCollectionService.class);
pi = PendingIntent.getService(DataCollectionActivity.this, 0, i, 0);
mgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() , 1000, pi);
You dont have to ask userpermissions.
참고URL : https://stackoverflow.com/questions/1082437/android-how-to-use-alarmmanager
'IT story' 카테고리의 다른 글
JavaScript를 사용하여 XML 구문 분석 (0) | 2020.09.13 |
---|---|
동일한 프로젝트의 다른 파일에서 모듈을 포함하는 방법은 무엇입니까? (0) | 2020.09.13 |
열 이름을 이스케이프하는 SQL 표준? (0) | 2020.09.13 |
Node.js 또는 Erlang (0) | 2020.09.13 |
C의 물결표 연산자 (0) | 2020.09.13 |