版本更新使用

//要使用xutils工具类

//使用网页的操作放在一个WampServer64包下www下,要自己新建download文件夹把要更新的apk放在里面

//权限依赖,用到的自己粘贴
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
compile 'com.android.support:design:25.3.1'
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
compile 'com.google.code.gson:gson:2.8.0'
compile 'com.github.bumptech.glide:glide:3.8.0'
compile 'org.xutils:xutils:3.5.0'

compile 'org.webjars.npm:react-imageloader:2.1.0'

MainActivity 类
@ContentView(R.layout.activity_main)
public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";

    private String url = "http://172.18.47.36/checkversion.php";
    // 文件保存地址
    private String targetPath = "";

    private ProgressDialog progressDialog;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        x.view().inject(this);

        if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
            File file = Environment.getExternalStorageDirectory();
            targetPath = file.getAbsolutePath() + File.separator;
        }

        progressDialog = new ProgressDialog(this);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

    }

    @Event(R.id.btn_check_version)
    private void btnClick(View v) {
        checkVerson();
    }

    /**
     * 检查版本号
     */
    private void checkVerson() {
        int versionCode = VersionUtil.getVersoinCode(this);
        RequestParams params = new RequestParams(url);
        params.addQueryStringParameter("version", String.valueOf(versionCode));
        x.http().get(params, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                Log.i(TAG, "onSuccess: " + result);
                Gson gson = new Gson();
                Type type = new TypeToken<MessageBean<Versionns>>() {}.getType();

                MessageBean<Versionns> messageBean = gson.fromJson(result, type);
                if (messageBean.isSuccess()) {
                    final Versionns version = messageBean.getResult();
                    // 有更新
                    if (version.isHasNewVersion()) {
                        // 强制更新
                        if (version.isMustUpdate()) {
                            new AlertDialog.Builder(MainActivity.this)
                                    .setTitle("版本更新")
                                    .setMessage("升级到最新版本")
                                    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            updateVersion(version.getUrl());
                                            dialog.dismiss();
                                        }
                                    })
                                    // 不可取消
                                    .setCancelable(false)
                                    .create().show();


                        } else {
                            // 选择更新
                            new AlertDialog.Builder(MainActivity.this)
                                    .setTitle("版本更新")
                                    .setMessage("是否要升级到最新版本")
                                    .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            updateVersion(version.getUrl());
                                            dialog.dismiss();
                                        }
                                    })
                                    .setNegativeButton("下次再说", new DialogInterface.OnClickListener() {
                                        @Override
                                        public void onClick(DialogInterface dialog, int which) {
                                            dialog.dismiss();
                                        }
                                    })
                                    .create().show();
                        }
                    } else {
                        // 无可用更新
                        Toast.makeText(MainActivity.this, "当前已经是最新版本", Toast.LENGTH_SHORT).show();
                    }
                }

            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                Log.e(TAG, "onError: " + ex.getMessage());
            }

            @Override
            public void onCancelled(CancelledException cex) {

            }

            @Override
            public void onFinished() {

            }
        });
    }

    /**
     * 版本更新
     *
     * @param url
     */
    private void updateVersion(String url) {
        targetPath = targetPath + System.currentTimeMillis() + ".apk";
        RequestParams params = new RequestParams(url);
        // 设置下载保存路径
        params.setSaveFilePath(targetPath);
        // xutils的文件下载
        x.http().get(params, new Callback.ProgressCallback<File>() {
            @Override
            public void onSuccess(File result) {
                if (progressDialog.isShowing()) {
                    progressDialog.dismiss();
                }
                installApk(result);
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                if (progressDialog.isShowing()) {
                    progressDialog.dismiss();
                }
                Toast.makeText(MainActivity.this, "下载失败", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onCancelled(CancelledException cex) {

            }

            @Override
            public void onFinished() {

            }

            @Override
            public void onWaiting() {

            }

            @Override
            public void onStarted() {

            }

            @Override
            public void onLoading(long total, long current, boolean isDownloading) {
                if (isDownloading) {
                    progressDialog.setMessage("正在下载...");
                    progressDialog.show();
                    progressDialog.setMax((int) total);
                    progressDialog.setProgress((int) current);
                }
            }
        });
    }

    /**
     * 安装apk
     * @param file
     */
    private void installApk(File file) {
        Intent intent = new Intent();
        intent.setAction(Intent.ACTION_VIEW);
        intent.addCategory("android.intent.category.DEFAULT");
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setDataAndType(Uri.fromFile(file), "application/vnd.android.package-archive");
        startActivity(intent);
        android.os.Process.killProcess(android.os.Process.myPid());
    }
}
//帮助类,相关类,xutils的工具类自行处理
1.帮助类
public class VersionUtil {
    /**
     * 获取当前应用的versionCode
     */
    public static int getVersoinCode(Context context) {
        int versionCode = 0;

        try {
            // 包管理
            PackageManager packageManager = context.getPackageManager();
            // 包名字
            String packageName = context.getPackageName();
            // 包信息
            PackageInfo packageInfo = packageManager.getPackageInfo(packageName, 0);
            // 应用的版本code
              versionCode= packageInfo.versionCode;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        return  versionCode;
    }
}

//相关类1

public class MessageBean<T> {

    private boolean success;
    private String message;
    private T result;

    public boolean isSuccess() {
        return success;
    }

    public void setSuccess(boolean success) {
        this.success = success;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getResult() {
        return result;
    }

    public void setResult(T result) {
        this.result = result;
    }
}
//相关类2

class Versionns {
    @SerializedName("has_new_version")
    private boolean hasNewVersion;
    @SerializedName("must_update")
    private boolean mustUpdate;
    private String url;

    public boolean isHasNewVersion() {
        return hasNewVersion;
    }

    public void setHasNewVersion(boolean hasNewVersion) {
        this.hasNewVersion = hasNewVersion;
    }

    public boolean isMustUpdate() {
        return mustUpdate;
    }

    public void setMustUpdate(boolean mustUpdate) {
        this.mustUpdate = mustUpdate;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }
}
//自己建立xutils别忘记在清单中注册

public class BaseApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        x.Ext.init(this);
        x.Ext.setDebug(BuildConfig.DEBUG);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值