私もあんまり分かりませんので、分かる範囲での解説です。
PendingIntentとかそんなん出てきます。
まずはIntentの登録方法。
指定時刻に起動するIntentをAlarmManagerに登録します。
ActivitySetAlarm.java
public class ActivitySetAlarm extends Activity { private static final int REQUEST_CODE = 0; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // ActivityAlarmReceiverから来た場合の判定 Intent intent = getIntent(); if (intent != null && intent.getAction().equals("received")) { // do something here } else { // do something here } } /** * 1分後に起動するようにPendingIntentを登録する */ public void setSchedule() { // ActivityAlarmReceiverを呼び出すインテントを作成 Intent i = new Intent(getApplicationContext(), ActivityAlarmReceiver.class); i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); // ブロードキャストを投げるPendingIntentの作成 PendingIntent sender = PendingIntent.getBroadcast( ActivitySetAlarm.this, REQUEST_CODE, i, PendingIntent.FLAG_UPDATE_CURRENT); // Calendarの作成 Calendar calendar = Calendar.getInstance(); // 1分後に起動するように登録 calendar.add(Calendar.MINUTE, -1); // AlramManager取得 AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); // AlramManagerにPendingIntentを登録 am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender); } /** * PandingIntentの登録を解除する */ public void removeSchedule() { // ActivityAlarmReceiverを呼び出すインテントを作成 Intent i = new Intent(getApplicationContext(), ActivityAlarmReceiver.class); // ブロードキャストを投げるPendingIntentの作成 PendingIntent sender = PendingIntent.getBroadcast( ActivitySetAlarm.this, REQUEST_CODE, i, PendingIntent.FLAG_UPDATE_CURRENT); // AlarmManager取得 AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); // PendingIntentをキャンセル am.cancel(sender); } }
受け取る方の作成
ActivityAlarmReceiver.java
public class ActivityAlarmReceiver extends BroadcastReceiver { // notifications @Override public void onReceive(Context context, Intent data) { Intent intent = new Intent(context, ActivitySetAlarm.class); intent.setAction("received"); PendingIntent pIntent = PendingIntent.getActivity(context, 0, intent, 0); try { pIntent.send(); } catch(Exception e){ Log.e(TAG, e.getMessage(), e); } } }
最後にAndroid Manifest.xmlにreceiverを登録して完了
<receiver android:name=".ActivityAlarmReceiver" android:process=":remote" />
0 件のコメント:
コメントを投稿