1*90c8c64dSAndroid Build Coastguard Worker /*
2*90c8c64dSAndroid Build Coastguard Worker * Copyright 2013 The Android Open Source Project
3*90c8c64dSAndroid Build Coastguard Worker *
4*90c8c64dSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
5*90c8c64dSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
6*90c8c64dSAndroid Build Coastguard Worker * You may obtain a copy of the License at
7*90c8c64dSAndroid Build Coastguard Worker *
8*90c8c64dSAndroid Build Coastguard Worker *     http://www.apache.org/licenses/LICENSE-2.0
9*90c8c64dSAndroid Build Coastguard Worker *
10*90c8c64dSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
11*90c8c64dSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
12*90c8c64dSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*90c8c64dSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
14*90c8c64dSAndroid Build Coastguard Worker * limitations under the License.
15*90c8c64dSAndroid Build Coastguard Worker */
16*90c8c64dSAndroid Build Coastguard Worker 
17*90c8c64dSAndroid Build Coastguard Worker package com.example.android.repeatingalarm;
18*90c8c64dSAndroid Build Coastguard Worker 
19*90c8c64dSAndroid Build Coastguard Worker import android.app.AlarmManager;
20*90c8c64dSAndroid Build Coastguard Worker import android.app.PendingIntent;
21*90c8c64dSAndroid Build Coastguard Worker import android.content.Intent;
22*90c8c64dSAndroid Build Coastguard Worker import android.os.Bundle;
23*90c8c64dSAndroid Build Coastguard Worker import android.os.SystemClock;
24*90c8c64dSAndroid Build Coastguard Worker import android.support.v4.app.Fragment;
25*90c8c64dSAndroid Build Coastguard Worker import android.view.MenuItem;
26*90c8c64dSAndroid Build Coastguard Worker import com.example.android.common.logger.*;
27*90c8c64dSAndroid Build Coastguard Worker 
28*90c8c64dSAndroid Build Coastguard Worker 
29*90c8c64dSAndroid Build Coastguard Worker public class RepeatingAlarmFragment extends Fragment {
30*90c8c64dSAndroid Build Coastguard Worker 
31*90c8c64dSAndroid Build Coastguard Worker     // This value is defined and consumed by app code, so any value will work.
32*90c8c64dSAndroid Build Coastguard Worker     // There's no significance to this sample using 0.
33*90c8c64dSAndroid Build Coastguard Worker     public static final int REQUEST_CODE = 0;
34*90c8c64dSAndroid Build Coastguard Worker 
35*90c8c64dSAndroid Build Coastguard Worker     @Override
onCreate(Bundle savedInstanceState)36*90c8c64dSAndroid Build Coastguard Worker     public void onCreate(Bundle savedInstanceState) {
37*90c8c64dSAndroid Build Coastguard Worker         super.onCreate(savedInstanceState);
38*90c8c64dSAndroid Build Coastguard Worker         setHasOptionsMenu(true);
39*90c8c64dSAndroid Build Coastguard Worker     }
40*90c8c64dSAndroid Build Coastguard Worker 
41*90c8c64dSAndroid Build Coastguard Worker     @Override
onOptionsItemSelected(MenuItem item)42*90c8c64dSAndroid Build Coastguard Worker     public boolean onOptionsItemSelected(MenuItem item) {
43*90c8c64dSAndroid Build Coastguard Worker         if(item.getItemId() == R.id.sample_action) {
44*90c8c64dSAndroid Build Coastguard Worker 
45*90c8c64dSAndroid Build Coastguard Worker             // BEGIN_INCLUDE (intent_fired_by_alarm)
46*90c8c64dSAndroid Build Coastguard Worker             // First create an intent for the alarm to activate.
47*90c8c64dSAndroid Build Coastguard Worker             // This code simply starts an Activity, or brings it to the front if it has already
48*90c8c64dSAndroid Build Coastguard Worker             // been created.
49*90c8c64dSAndroid Build Coastguard Worker             Intent intent = new Intent(getActivity(), MainActivity.class);
50*90c8c64dSAndroid Build Coastguard Worker             intent.setAction(Intent.ACTION_MAIN);
51*90c8c64dSAndroid Build Coastguard Worker             intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
52*90c8c64dSAndroid Build Coastguard Worker             // END_INCLUDE (intent_fired_by_alarm)
53*90c8c64dSAndroid Build Coastguard Worker 
54*90c8c64dSAndroid Build Coastguard Worker             // BEGIN_INCLUDE (pending_intent_for_alarm)
55*90c8c64dSAndroid Build Coastguard Worker             // Because the intent must be fired by a system service from outside the application,
56*90c8c64dSAndroid Build Coastguard Worker             // it's necessary to wrap it in a PendingIntent.  Providing a different process with
57*90c8c64dSAndroid Build Coastguard Worker             // a PendingIntent gives that other process permission to fire the intent that this
58*90c8c64dSAndroid Build Coastguard Worker             // application has created.
59*90c8c64dSAndroid Build Coastguard Worker             // Also, this code creates a PendingIntent to start an Activity.  To create a
60*90c8c64dSAndroid Build Coastguard Worker             // BroadcastIntent instead, simply call getBroadcast instead of getIntent.
61*90c8c64dSAndroid Build Coastguard Worker             PendingIntent pendingIntent = PendingIntent.getActivity(getActivity(), REQUEST_CODE,
62*90c8c64dSAndroid Build Coastguard Worker                     intent, 0);
63*90c8c64dSAndroid Build Coastguard Worker 
64*90c8c64dSAndroid Build Coastguard Worker             // END_INCLUDE (pending_intent_for_alarm)
65*90c8c64dSAndroid Build Coastguard Worker 
66*90c8c64dSAndroid Build Coastguard Worker             // BEGIN_INCLUDE (configure_alarm_manager)
67*90c8c64dSAndroid Build Coastguard Worker             // There are two clock types for alarms, ELAPSED_REALTIME and RTC.
68*90c8c64dSAndroid Build Coastguard Worker             // ELAPSED_REALTIME uses time since system boot as a reference, and RTC uses UTC (wall
69*90c8c64dSAndroid Build Coastguard Worker             // clock) time.  This means ELAPSED_REALTIME is suited to setting an alarm according to
70*90c8c64dSAndroid Build Coastguard Worker             // passage of time (every 15 seconds, 15 minutes, etc), since it isn't affected by
71*90c8c64dSAndroid Build Coastguard Worker             // timezone/locale.  RTC is better suited for alarms that should be dependant on current
72*90c8c64dSAndroid Build Coastguard Worker             // locale.
73*90c8c64dSAndroid Build Coastguard Worker 
74*90c8c64dSAndroid Build Coastguard Worker             // Both types have a WAKEUP version, which says to wake up the device if the screen is
75*90c8c64dSAndroid Build Coastguard Worker             // off.  This is useful for situations such as alarm clocks.  Abuse of this flag is an
76*90c8c64dSAndroid Build Coastguard Worker             // efficient way to skyrocket the uninstall rate of an application, so use with care.
77*90c8c64dSAndroid Build Coastguard Worker             // For most situations, ELAPSED_REALTIME will suffice.
78*90c8c64dSAndroid Build Coastguard Worker             int alarmType = AlarmManager.ELAPSED_REALTIME;
79*90c8c64dSAndroid Build Coastguard Worker             final int FIFTEEN_SEC_MILLIS = 15000;
80*90c8c64dSAndroid Build Coastguard Worker 
81*90c8c64dSAndroid Build Coastguard Worker             // The AlarmManager, like most system services, isn't created by application code, but
82*90c8c64dSAndroid Build Coastguard Worker             // requested from the system.
83*90c8c64dSAndroid Build Coastguard Worker             AlarmManager alarmManager = (AlarmManager)
84*90c8c64dSAndroid Build Coastguard Worker                     getActivity().getSystemService(getActivity().ALARM_SERVICE);
85*90c8c64dSAndroid Build Coastguard Worker 
86*90c8c64dSAndroid Build Coastguard Worker             // setRepeating takes a start delay and period between alarms as arguments.
87*90c8c64dSAndroid Build Coastguard Worker             // The below code fires after 15 seconds, and repeats every 15 seconds.  This is very
88*90c8c64dSAndroid Build Coastguard Worker             // useful for demonstration purposes, but horrendous for production.  Don't be that dev.
89*90c8c64dSAndroid Build Coastguard Worker             alarmManager.setRepeating(alarmType, SystemClock.elapsedRealtime() + FIFTEEN_SEC_MILLIS,
90*90c8c64dSAndroid Build Coastguard Worker                     FIFTEEN_SEC_MILLIS, pendingIntent);
91*90c8c64dSAndroid Build Coastguard Worker             // END_INCLUDE (configure_alarm_manager);
92*90c8c64dSAndroid Build Coastguard Worker             Log.i("RepeatingAlarmFragment", "Alarm set.");
93*90c8c64dSAndroid Build Coastguard Worker         }
94*90c8c64dSAndroid Build Coastguard Worker         return true;
95*90c8c64dSAndroid Build Coastguard Worker     }
96*90c8c64dSAndroid Build Coastguard Worker }
97