android App一段時間無操作返回上一介面或其他介面
阿新 • • 發佈:2019-02-07
大體需求就是5分鐘無操作返回主介面
我的第一想法就是有一個倒計時來實現倒計時5分鐘 有一個onTouch事件監測使用者的點選事件
具體實現寫了一個時間的倒計時的工具類
BackMain工具類
public class BackMain extends CountDownTimer { private Context context; /** * 引數 millisInFuture 倒計時總時間(如60S,120s等) * 引數 countDownInterval 漸變時間(每次倒計1s) */ public BackMain(long millisInFuture, long countDownInterval, Context context) { super(millisInFuture, countDownInterval); this.context = context; } // 計時完畢時觸發 @Override public void onFinish() { context.startActivity(new Intent(context, MainActivity.class)); } // 計時過程顯示 @Override public void onTick(long millisUntilFinished) { } }
Second_Activity實現類
public class Second_Activity extends Activity{ private BackMain backMain; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.aaaa); init(); } private void init() { // TODO: 2017/8/29 五分鐘無人操作回主頁面 //backMain = new BackMain(1000 * 60 * 5, 1000, this); backMain = new BackMain(1000 * 6 , 1000, Second_Activity.this); } @Override protected void onResume() { timeStart(); super.onResume(); } //region 無操作 返回主頁 private void timeStart() { new Handler(getMainLooper()).post(new Runnable() { @Override public void run() { backMain.start(); } }); } /** * 主要的方法,重寫dispatchTouchEvent * * @param ev * @return */ @Override public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) { //獲取觸控動作,如果ACTION_UP,計時開始。 case MotionEvent.ACTION_UP: backMain.start(); break; //否則其他動作計時取消 default: backMain.cancel(); break; } return super.dispatchTouchEvent(ev); } @Override protected void onPause() { super.onPause(); backMain.cancel(); } }
最近需求又改了 萬一使用者在看視訊 你退出了出界面是不是很尷尬 所有老闆新的需求彈出一個對話方塊提示使用者是否繼續留在這個頁面頁面
如果不需要就退出 如果需要就點選對話方塊 2小時候跳轉到主介面
我直接把程式碼copy出來 已經實現過的
package com.example.unruly_zhao.aaaaaaaaaaa; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.os.CountDownTimer; import android.os.Handler; import android.support.annotation.Nullable; import android.view.MotionEvent; import android.widget.Toast; /** * Created by Unruly_Zhao on 2017/9/13. */ public class Second_Activity extends Activity { private BackMain backMain, backMain2; private boolean flags; public int state; private boolean mFlag; private Handler mHandler = new Handler(); private boolean mFlags; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.aaaa); init(); } private void init() { // TODO: 2017/8/29 五分鐘無人操作回主頁面 //backMain = new BackMain(1000 * 60 * 5, 1000, this); backMain = new BackMain(1000 * 2, 1000, this); backMain2 = new BackMain(1000 * 10, 1000, this); } @Override protected void onResume() { timeStart(); super.onResume(); } //region 無操作 返回主頁 private void timeStart() { new Handler(getMainLooper()).post(new Runnable() { @Override public void run() { backMain.start(); } }); } /** * 主要的方法,重寫dispatchTouchEvent * * @param ev * @return */ @Override public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) { //獲取觸控動作,如果ACTION_UP,計時開始。 case MotionEvent.ACTION_UP: backMain.start(); break; //否則其他動作計時取消 default: backMain.cancel(); break; } return super.dispatchTouchEvent(ev); } @Override protected void onPause() { super.onPause(); backMain.cancel(); } class BackMain extends CountDownTimer { private Context context; /** * 引數 millisInFuture 倒計時總時間(如60S,120s等) * 引數 countDownInterval 漸變時間(每次倒計1s) */ public BackMain(long millisInFuture, long countDownInterval, Context context) { super(millisInFuture, countDownInterval); this.context = context; } // 計時完畢時觸發 @Override public void onFinish() { if (!mFlag) { init_dialog(); mHandler.postDelayed(new Runnable() { @Override public void run() { if (!mFlags) { startActivity(new Intent(Second_Activity.this, MainActivity.class)); } } }, 2000); } else { startActivity(new Intent(Second_Activity.this, MainActivity.class)); } Toast.makeText(context, "喜歡你都那麼久那麼久了", Toast.LENGTH_LONG).show(); /* //context.startActivity(new Intent(context, MainActivity.class));*/ } // 計時過程顯示 @Override public void onTick(long millisUntilFinished) { } } private void init_dialog() { mFlag = true; AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(Second_Activity.this); alertDialogBuilder.setTitle("喜歡你都那麼久那麼久了");//設定標題 alertDialogBuilder.setMessage("喜歡你的原因,並不是你長的好不好看的原因。而是在特殊的時間給我不一樣的感覺"); //設定內容 alertDialogBuilder.setIcon(R.mipmap.ic_launcher); //自定義圖示 alertDialogBuilder.setCancelable(false); //設定是否能點選,對話方塊的其他區域取消 alertDialogBuilder.setPositiveButton("確認", new DialogInterface.OnClickListener() { //設定其確認按鈕和監聽事件 @Override public void onClick(DialogInterface dialog, int which) { new Handler(getMainLooper()).post(new Runnable() { @Override public void run() { backMain2.start(); mFlags = true; // 這句話該何去何從 } }); } }); alertDialogBuilder.create(); //建立對話方塊 alertDialogBuilder.show(); //顯示對話方塊 } }