package navigation.chiphd.com.alarmdemo; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.TextView; import java.util.Calendar; import java.util.TimeZone; public class MainActivity extends AppCompatActivity { private Calendar mCalendar; public TextView time; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); time = (TextView) findViewById(R.id.time); //得到日历实例,主要是为了下面的获取时间 mCalendar = Calendar.getInstance(); mCalendar.setTimeInMillis(System.currentTimeMillis()); //获取当前毫秒值 long systemTime = System.currentTimeMillis(); //是设置日历的时间,主要是让日历的年月日和当前同步 mCalendar.setTimeInMillis(System.currentTimeMillis()); // 这里时区需要设置一下,不然可能个别手机会有8个小时的时间差 mCalendar.setTimeZone(TimeZone.getTimeZone("GMT+8")); //设置在几点提醒 设置的为13点 mCalendar.set(Calendar.HOUR_OF_DAY, 9); //设置在几分提醒 设置的为25分 mCalendar.set(Calendar.MINUTE, 03); //下面这两个看字面意思也知道 mCalendar.set(Calendar.SECOND, 0); mCalendar.set(Calendar.MILLISECOND, 0); //上面设置的就是13点25分的时间点 //获取上面设置的13点25分的毫秒值 long selectTime = mCalendar.getTimeInMillis(); // 如果当前时间大于设置的时间,那么就从第二天的设定时间开始 if (systemTime > selectTime) { mCalendar.add(Calendar.DAY_OF_MONTH, 1); } //AlarmReceiver.class为广播接受者 Intent intent = new Intent(MainActivity.this, AlarmReceiver.class); PendingIntent pi = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0); //得到AlarmManager实例 AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); //**********注意!!下面的两个根据实际需求任选其一即可********* /** * 单次提醒 * mCalendar.getTimeInMillis() 上面设置的13点25分的时间点毫秒值 */ time.setText(mCalendar.getTime() + ""); am.set(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), pi); /** * 重复提醒 * 第一个参数是警报类型;下面有介绍 * 第二个参数网上说法不一,很多都是说的是延迟多少毫秒执行这个闹钟, * 第三个参数是重复周期,也就是下次提醒的间隔 毫秒值 我这里是一天后提醒 */ // am.setRepeating(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), (1000 * 60 * 60 * 24), pi); } } public class ActionBroadCast extends BroadcastReceiver{ @Override public void onReceive(Context context, Intent intent) { Intent intent1 = new Intent("android.intent.action.ACTION_REQUEST_SHUTDOWN"); intent1.putExtra("android.intent.extra.KEY_CONFIRM", false); intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent1); } } 权限: <uses-permission android:name="android.permission.SHUTDOWN" /> 注册: <receiver android:name="com.android.launcher2.ActionBroadCast"> <intent-filter> <action android:name="android.intent.action.ALARM_CLOCK" /> </intent-filter> </receiver>
android定时关机
最新推荐文章于 2024-07-19 09:43:55 发布