1. 程式人生 > >android App一段時間無操作返回上一介面或其他介面

android App一段時間無操作返回上一介面或其他介面

大體需求就是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();         //顯示對話方塊


    }


}