【源码】简单的升级相关弹窗源码

升级相关的源码,详细介绍见我另一篇博客。

飞机票:【android应用】简单的升级相关弹窗---解决了service中弹出弹窗问题、Handler的使用实例、进度条


package com.showimage.start.myapplication.UiTool;

import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.Build;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.WindowManager;

import com.showimage.start.myapplication.R;

public class TestShowUi {
    private static final String TAG = "TestShowUi";
    private boolean TestState = false;

    private Context mContext = null;
    private static TestShowUi mTestShowUi = null;
    private ProgressDialog mProgressDialog;
    private AlertDialog mAlertDialog;

    private static final int MSG_DOWNLOAD = 0;   //开始下载
    private static final int MSG_PROGRESS = 1;   //更新状态
    private static final int MSG_INSTALL_START = 2;  //开始安装
    private static final int MSG_INSTALL_SUCCESSFUL = 3; //安装成功
    private static final int MSG_INSTALL_FAIL = 4; //安装失败
    private static final int MSG_CLOSE_WINDOW = 5; //关闭窗口

    //测试用例
    public void test(){
        TestState = true;
        Message message = mHandler.obtainMessage(MSG_DOWNLOAD);
        mHandler.sendMessage(message);
    }

    private TestShowUi(Context context){
        if (null == mContext) {
            mContext = context;
        }
        if (null != mContext) {
            mAlertDialog = new AlertDialog.Builder(mContext).create();
            mProgressDialog = new ProgressDialog(mContext);
        }
    }

    public static synchronized TestShowUi getInstance(Context context){
        if (null == mTestShowUi) {
            mTestShowUi = new TestShowUi(context);
        }
        return mTestShowUi;
    }

    /**
     * 关闭窗口
     * */
    private void closeWindow(){
        if(mProgressDialog.isShowing()){
            mProgressDialog.dismiss();
        }
        if(mAlertDialog.isShowing()){
            mAlertDialog.dismiss();
        }
    }

    /**
     * 更新升级状态
     * */
    private void updateProgress(int progress){
        mProgressDialog.setIndeterminate(false);
        mProgressDialog.setMax(100);
        mProgressDialog.setProgress(progress);
        Log.i(TAG, "updateProgress: progress "+progress);
    }

    /**
     * 显示下载
     * */
    private void showDownloadUi(){
        closeWindow();
        mProgressDialog.setIcon(R.mipmap.ic_launcher);
        mProgressDialog.setTitle("下载");
        mProgressDialog.setMessage("正在下载中...");
        mProgressDialog.setMax(100);
        //设置进度
        mProgressDialog.setProgress(1);
        //mProgressDialog.STYLE_SPINNER  默认进度条是转圈
        //mProgressDialog.STYLE_HORIZONTAL  横向进度条
        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        setServiceShow(0);
        mProgressDialog.show();
        if(TestState){
            T t = new T(MSG_INSTALL_START);
            t.start();
        }
        return;
    }

    /**
     * 显示升级
     * */
    private void showInstallUi(){
        closeWindow();
        mProgressDialog.cancel();
        mProgressDialog.setIcon(R.mipmap.ic_launcher);
        mProgressDialog.setTitle("安装");
        mProgressDialog.setMessage("正在安装...");
        mProgressDialog.setMax(0);
        //设置状态不明
        mProgressDialog.setIndeterminate(true);
        setServiceShow(0);
        mProgressDialog.show();

        if(TestState){
            T t = new T(MSG_INSTALL_SUCCESSFUL);
            t.start();
        }
        return;
    }

    /**
     * 显示升级成功
     * */
    private void showInstallSeccessfulUi(){
        closeWindow();
        mAlertDialog.setIcon(R.mipmap.ic_launcher);
        mAlertDialog.setTitle("安装提示");
        mAlertDialog.setMessage("安装成功");

        setServiceShow(1);
        mAlertDialog.show();

        if(TestState){
            T t = new T(MSG_INSTALL_FAIL);
            t.start();
        }
        return;
    }

    /**
     * 显示升级失败
     * */
    private void showInstallFailUi(){
        closeWindow();
        mAlertDialog.setIcon(R.mipmap.ic_launcher);
        mAlertDialog.setTitle("安装提示");
        mAlertDialog.setMessage("安装失败");
        setServiceShow(1);
        mAlertDialog.show();

        if(TestState){
            T t = new T(MSG_INSTALL_FAIL+1);
            t.start();
        }
        return;
    }


    /**
     * 允许服务中弹窗
     * */
    private void setServiceShow(int type){
        if(type == 0){
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M&&Build.VERSION.SDK_INT < Build.VERSION_CODES.O){
                //android6.0~7.0
                mProgressDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
            }else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
                //android8.0以上
                mProgressDialog.getWindow().setType((WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY));
            }else {
                mProgressDialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT));
            }
        }else if(type == 1){
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M&&Build.VERSION.SDK_INT < Build.VERSION_CODES.O){
                //android6.0~7.0
                mAlertDialog.getWindow().setType(WindowManager.LayoutParams.TYPE_TOAST);
            }else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
                //android8.0以上
                mAlertDialog.getWindow().setType((WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY));
            }else {
                //其他
                mAlertDialog.getWindow().setType((WindowManager.LayoutParams.TYPE_SYSTEM_ALERT));
            }
        }
    }

    public Handler mHandler = new Handler()
    {
        @Override
        public void handleMessage(Message msg){
            super.handleMessage(msg);

            Log.i(TAG, "handlerMessage: is MSG_INSTALL "+msg.what);
            switch (msg.what){
                case MSG_DOWNLOAD:
                    showDownloadUi();
                    break;
                case MSG_INSTALL_START:
                    showInstallUi();
                    break;
                case MSG_INSTALL_SUCCESSFUL:
                    showInstallSeccessfulUi();
                    break;
                case MSG_INSTALL_FAIL:
                    showInstallFailUi();
                    break;
                case MSG_PROGRESS:
                    updateProgress(msg.arg1);
                    break;
                case MSG_CLOSE_WINDOW:
                    closeWindow();
                    break;
                default:
                    break;
            }
        }
    };

    //线程已启动默认执行run方法
    class T extends Thread {
        private int mState = 0;

        public T (int state) {
            mState = state;
        }

        @Override
        public void run() {
            int i = 0;
            while (true) {
                if(mState == MSG_INSTALL_START){
                    Message msg = mHandler.obtainMessage(MSG_PROGRESS);
                    msg.arg1 = i;
                    mHandler.sendMessage(msg);
                }
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                i += 25;
                if (i > 100) {
                    //结束进度条
                    //mProgressDialog.dismiss();
                    Message message = mHandler.obtainMessage(mState);
                    mHandler.sendMessage(message);
                    break;
                }
            }
        }
    }
}

发布了61 篇原创文章 · 获赞 45 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/twk121109281/article/details/101030405