亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術文章
文章詳情頁

Android實現(xiàn)定時任務及鬧鐘

瀏覽:77日期:2022-09-23 15:01:20

android中定時有很多種是實現(xiàn),常見的Handler 與Thread的結合,handler.postDelayed ,以及要使用的AlarmManger 等都可以實現(xiàn)定時任務的執(zhí)行,但是使用場景卻大不相同,這里主要是怎么用AlarmManager實現(xiàn)定時任務。

涉及知識點:

1)BroadCastReceiver任務接收

2)CountDownTimer倒計時

3)AlertDialog 任務提醒

4)AlarmManager 定時任務

這里實現(xiàn)的需求時每天定時24點關機,有設備是定制系統(tǒng),防止長時間的不關機導致應用的卡頓,在關機時并給用戶以提示,如果無操作就自動關機。

第一步是實現(xiàn)簡單布局,在布局中寫兩個Button,一個設置,一個取消 第二步:初始化頁面布局及Button

public class MainActivity extends AppCompatActivityimplements View.OnClickListener{Button btn_set,btn_cancel;AlarmManager am;PendingIntent pi;long time;@Overrideprotected void onCreate(@NullableBundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView(){btn_set=findViewById(R.id.btn_Set);btn_cancel=findViewById(R.id.btn_Cancel);btn_set.setOnClickListener(this);btn_cancel.setOnClickListener(this);initAlarm();}@Overridepublic void onClick(View v) {switch(v.getId()){case R.id.btn_Set:setAlarm();break;case R.id.btn_Cancel:cancelAlarm();break;}}// 初始化Alarmprivate void initAlarm(){pi=PendingIntent.getBroadcast(this,0,getMsgIntent(),0);time=System.currentTimeMillis();am= (AlarmManager) getSystemService(ALARM_SERVICE);}private Intent getMsgIntent(){//AlarmReceiver 為廣播在下面代碼中Intent intent=newIntent(this,AlarmReceiver.class);intent.setAction(AlarmReceiver.BC_ACTION);intent.putExtra('msg','鬧鐘開啟');return intent;}//設置定時執(zhí)行的任務private void setAlarm(){//android Api的改變不同版本中設 置有所不同if(Build.VERSION.SDK_INT<19){am.set(AlarmManager.RTC_WAKEUP,getTimeDiff(),pi);}else{am.setExact(AlarmManager.RTC_WAKEUP,getTimeDiff(),pi);}}public long getTimeDiff(){//這里設置的是當天的15:55分,注意精確到秒,時間可以自由設置Calendar ca=Calendar.getInstance();ca.set(Calendar.HOUR_OF_DAY,15);ca.set(Calendar.MINUTE,55);ca.set(Calendar.SECOND,0);return ca.getTimeInMillis();}//取消定時任務的執(zhí)行private void cancelAlarm(){am.cancel(pi);}}

廣播主要代碼

import android.app.AlertDialog;import android.content.BroadcastReceiver;import android.content.Context;import android.content.DialogInterface;import android.content.Intent;import android.os.Build;import android.os.CountDownTimer;import android.util.Log;import android.view.WindowManager;import android.widget.Toast;public class AlarmReceiver extends BroadcastReceiver {private String TAG=this.getClass().getSimpleName();public static final String BC_ACTION='com.ex.action.BC_ACTION';private AlertDialog.Builder builder;CountDownTimer timer;@Overridepublic void onReceive(Context context,Intent intent) {String msg=intent.getStringExtra('msg');Log.i(TAG,'get Receiver msg :'+msg);Toast.makeText(context,msg,Toast.LENGTH_LONG).show();showConfirmDialog(context);}private void showConfirmDialog(Context context){builder=newAlertDialog.Builder(context);builder.setTitle('提示').setMessage('將在30秒后關機').setCancelable(false).setPositiveButton('取消',newDialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, intwhich) {if(timer!=null)timer.cancel();}});setShowDialogType(context,builder.create());}private void setShowDialogType(Context context,AlertDialog alertDialog){int type;if(Build.VERSION.SDK_INT>24){type= WindowManager.LayoutParams.TYPE_PHONE;}else if(Build.VERSION.SDK_INT>18){type= WindowManager.LayoutParams.TYPE_TOAST;}else{type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;}alertDialog.getWindow().setType(type);alertDialog.show();//開啟倒計時,并設置倒計時時間(秒)startCountDownTimer(context,alertDialog,30);}private void startCountDownTimer(final Context context,final AlertDialog alertDialog,inttime){timer=newCountDownTimer(time*1000,1000) {@Overridepublic void onTick(long millisUntilFinished) {//倒計時提示文字Log.i(TAG,'onTick time :'+millisUntilFinished);alertDialog.setMessage('將在'+(millisUntilFinished/1000)+'關機');}@Overridepublic void onFinish() {//倒計時結束Log.i(TAG,'倒計時結束!');alertDialog.dismiss();//倒計時結束執(zhí)行定時的任務// shutdown(context);}};timer.start();}//shoutDown需要 系統(tǒng)權限才能執(zhí)行否則會提示權限異常public void shutDown(Context context) {String action ='android.intent.action.ACTION_REQUEST_SHUTDOWN';String extraName ='android.intent.extra.USER_REQUESTED_SHUTDOWN';Intent intent =newIntent(action);intent.putExtra(extraName, true);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(intent);}}

在AndroidManifest.xml中聲明配置文件中聲明:

如實全部代碼實現(xiàn)定時任務

彈框需要如下權限:

< uses-permission android:name=”android.permission.SYSTEM_ALERT_WINDOW”/>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Android
相關文章:
主站蜘蛛池模板: 国产精品国产自线在线观看 | 狠狠色丁香久久综合网 | 国厂自拍| 国产一区二区免费不卡在线播放 | 999成人国产精品 | 国产粉嫩高中生无套第一次 | 久久精品国产国产 | 免费看成人片 | 国产资源在线免费观看 | 日本不卡高清免费 | 亚洲国产精品一区二区三区在线观看 | 欧美怡红院在线 | 1a级毛片免费观看 | 老王午夜69精品影院 | 成人满18在线观看网站免费 | 日本一区二区高清免费不卡 | 暖暖视频日韩欧美在线观看 | 一区二区三区高清不卡 | 欧美一级黄 | 在线播放高清国语自产拍免费 | 国产一级毛片亚洲久留木玲 | 国产日产高清欧美一区二区三区 | 免费看黄色的网址 | 国产精品久久久久久一级毛片 | 亚洲国产成人九九综合 | 久草视频免费看 | 一区二区三区在线免费视频 | 女人张腿让男桶免费视频网站 | 国产成人在线观看免费网站 | 日本精高清区一 | 99国产精品热久久久久久夜夜嗨 | 九九线精品视频 | 中文字幕日韩精品中文区 | 波多野结衣在线中文 | 国产亚洲精品美女一区二区 | 国产成版人视频网站免费下 | 亚洲美女色成人综合 | 色综合九九| 亚洲高清国产拍精品影院 | 毛片网站在线看 | 性刺激久久久久久久久 |