0基础做网站用什么语言,网站设计的原始资料,wordpress编辑器自动标签,攻击asp网站AlarmManager是Android提供的一个全局定时器#xff0c;利用系统闹钟定时发送广播。这样做的好处是#xff1a;如果App提前注册闹钟的广播接收器#xff0c;即使App退出了#xff0c;只要定时到达#xff0c;App就会被唤醒响应广播事件。
AlarmManager设置的PendingInten…AlarmManager是Android提供的一个全局定时器利用系统闹钟定时发送广播。这样做的好处是如果App提前注册闹钟的广播接收器即使App退出了只要定时到达App就会被唤醒响应广播事件。
AlarmManager设置的PendingIntent待定意图只要未cancel就会按时启动无论程序是否关闭。
请注意静态注册的广播接收者在即使程序关闭也依然生效动态注册的广播接收者在程序关闭后自动注销动态注册的广播接收者也可使用unregisterReceiver()手动注销。在Android8.0以后只有小部分接收系统广播的广播接收者允许静态注册其他广播接收者只能动态注册否则收不到广播。
一、使用方法
(1) 创建用于广播的Intent(意图)
Intent intentnew Intent();
intent.setAction( MyTestBroadcast );
(2) 创建发送广播的PendingIntent(待定意图)
PendingIntent pendingIntentPendingIntent.getBroadcast(MainActivity.this,2333,intent,PendingIntent.FLAG_IMMUTABLE);第一个参数为环境第二个参数为请求码第三个参数为要执行的Intent(意图)第四个参数为请求时PendingIntent已存在的解决方案。
(3) 创建执行PendingIntent的时间
//创建Calendar
Calendar calendarCalendar.getInstance();
//将时间设置为当前时间
calendar.setTimeInMillis(System.currentTimeMillis());
//增加时间
calendar.add(Calendar.SECOND,7);
//获取最终时间
long timecalendar.getTimeInMillis();
(4) 创建AlarmManager并设置PendingIntent
//创建AlarmManager闹钟管理者
AlarmManager alarmManager (AlarmManager) getSystemService(ALARM_SERVICE);
//设置闹钟
alarmManager.set(AlarmManager.RTC_WAKEUP,time,pendingIntent);
alarmManager.set()方法的参数第一个参数为闹钟类型第二个参数为long型的执行PendingIntent的时间第三个参数为到达时间后执行的PendingIntent。
二、闹钟类型
(1) ELAPSED_REALTIME : 以手机开机时间为基准。
(2) ELAPSED_REALTIME_WAKEUP : 以手机开机时间为基准并且可以在休眠时发出广播。
(3) RTC : 以UTC标准时间为基准。
(4) RTC_WAKEUP 【常用】:以 UTC标准时间为基准并且可以在休眠时发出广播。
三、使用AlarmManager
//创建Intent意图用于发送广播
Intent intentnew Intent().setAction(MyTestBroadcast);
//根据Intent意图创建PendingIntent等待意图
PendingIntent pendingIntentPendingIntent.getBroadcast(MainActivity.this,2333,intent,PendingIntent.FLAG_IMMUTABLE);//获取执行时间
//创建Calendar
Calendar calendarCalendar.getInstance();
//将时间设置为当前时间
calendar.setTimeInMillis(System.currentTimeMillis());
//增加时间
calendar.add(Calendar.SECOND,7);
//获取最终时间
long timecalendar.getTimeInMillis();//创建AlarmManager闹钟管理者
AlarmManager alarmManager (AlarmManager) getSystemService(ALARM_SERVICE);
//设置闹钟
alarmManager.set(AlarmManager.RTC_WAKEUP,time,pendingIntent);
四、例子
1.创建广播接收者
AndroidManifest.xml清单文件
application......receiverandroid:name.MyBroadcastReceiverandroid:enabledtrueandroid:exportedtrue/receiveractivity............/activity
/application
MyBroadcastReceiver.java文件
public class MyBroadcastReceiver extends BroadcastReceiver{private Context context;public MyBroadcastReceiver(Context context){this.contextcontext;}public void onReceive(Context context, Intent intent) {//广播接收者NotificationManager notificationManager (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);if (Build.VERSION.SDK_INT Build.VERSION_CODES.O) {NotificationChannel notificationChannelnew NotificationChannel(id,name,NotificationManager.IMPORTANCE_HIGH);notificationManager.createNotificationChannel(notificationChannel);}Notification.Builder buildernew Notification.Builder(context);if (Build.VERSION.SDK_INT Build.VERSION_CODES.O) {builder.setChannelId(id);}builder.setContentText(接收到广播);builder.setSmallIcon(R.drawable.icon2);builder.setWhen(System.currentTimeMillis());builder.setAutoCancel(true);Notification notificationbuilder.build();notificationManager.notify(2333,notification);}
}
2.注册广播接收者设置定时发送广播闹钟
MainActivity.java文件
public class MainActivity extends AppCompatActivity {private MyBroadcastReceiver myBroadcastReceiver;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//注册广播接收者-接收MyTestBroadcast广播myBroadcastReceivernew MyBroadcastReceiver(MainActivity.this);IntentFilter intentFilternew IntentFilter();intentFilter.addAction(MyTestBroadcast);registerReceiver(myBroadcastReceiver,intentFilter);//获取控件Button buttonfindViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {public void onClick(View view) {//创建Intent意图用于发送广播Intent intentnew Intent().setAction(MyTestBroadcast);//根据Intent意图创建PendingIntent等待意图PendingIntent pendingIntentPendingIntent.getBroadcast(MainActivity.this,2333,intent,PendingIntent.FLAG_IMMUTABLE);//获取执行时间//创建CalendarCalendar calendarCalendar.getInstance();//将时间设置为当前时间calendar.setTimeInMillis(System.currentTimeMillis());//增加时间calendar.add(Calendar.SECOND,7);//获取最终时间long timecalendar.getTimeInMillis();//创建AlarmManager闹钟管理者AlarmManager alarmManager (AlarmManager) getSystemService(ALARM_SERVICE);//设置闹钟alarmManager.set(AlarmManager.RTC_WAKEUP,time,pendingIntent);//销毁页面MainActivity.this.finish();}});}protected void onDestroy() {super.onDestroy();// 不 注销广播接收者if(myBroadcastReceiver!null){//unregisterReceiver(myBroadcastReceiver);}}
}