Calendar cal = Calendar.getInstance(); cal.add(Calendar.SECOND, 30); Log.d(TAG, "設定鬧終於30秒後: " + cal); Intent intent = new Intent(this.ctx, TestReceiver.class); intent.putExtra("msg", "傳訊息給鬧鐘"); PendingIntent pi = PendingIntent.getBroadcast(this.ctx, 1, intent, PendingIntent.FLAG_ONE_SHOT); AlarmManager am = (AlarmManager) this.ctx.getSystemService(Context.ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), pi);這裡的 PendingIntent 除了可以用 Broadcast 以外,還可以用 Activity 和 Service。
PendingIntent.getActivity(...); PendingIntent.getService(...);使用 PendingIntent 傳送 Broadcast 的效果如同 Context.sendBroadcast(...)。
使用 AlarmManager.RTC_WAKEUP 可以叫醒待機中的 Android,也可以使用 AlarmManager.RTC 表示等 Android 醒來後才執行鬧鐘。
30秒後鬧鐘呼叫 TestReceiver.class:
public class TestReceiver extends BroadcastReceiver { private static final String TAG = "TestReceiver"; @Override public void onReceive(Context ctx, Intent intent) { Log.d(TAG, intent.toString()); String msg = intent.getStringExtra("msg"); Log.d(TAG, msg); } }最後在 Manifest 裡定義 receiver 就完成了。
<receiver android:name=".TestReceiver" />
沒有留言:
張貼留言