升级相关的源码,详细介绍见我另一篇博客。
飞机票:【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;
}
}
}
}
}