私もあんまり分かりませんので、分かる範囲での解説です。
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 件のコメント:
コメントを投稿