之前看了好多博客,拿过来用了用,都不是特别理想
自己手撸一个得了,拿去直接用就OK

public class UpdateService  {    private DownloadManager mDownloadManager;    private Context mContext;    private long downloadId;    private String apkName;    public UpdateService() {    }    public UpdateService(Context context) {        mContext = context;    }    public void download(String url, String name) {        final String packageName = "com.android.providers.downloads";        int state = mContext.getPackageManager().getApplicationEnabledSetting(packageName);        //检测下载管理器是否被禁用        if (state == PackageManager.COMPONENT_ENABLED_STATE_DISABLED                || state == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER                || state == PackageManager.COMPONENT_ENABLED_STATE_DISABLED_UNTIL_USED) {            AlertDialog.Builder builder = new AlertDialog.Builder(mContext).setTitle("温馨提示").setMessage                    ("系统下载管理器被禁止,需手动打开").setPositiveButton("确定", new DialogInterface.OnClickListener() {                @Override                public void onClick(DialogInterface dialog, int which) {                    dialog.dismiss();                    try {                        Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);                        intent.setData(Uri.parse("package:" + packageName));                        mContext.startActivity(intent);                    } catch (ActivityNotFoundException e) {                        Intent intent = new Intent(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);                        mContext.startActivity(intent);                    }                }            }).setNegativeButton("取消", new DialogInterface.OnClickListener() {                @Override                public void onClick(DialogInterface dialog, int which) {                    dialog.dismiss();                }            });            builder.create().show();        } else {            //正常下载流程            apkName = name;            DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));            request.setAllowedOverRoaming(false);            //通知栏显示            request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);            request.setTitle(AppUtil.getAppName(mContext));            request.setDescription("正在下载中...");            request.setVisibleInDownloadsUi(true);            //设置下载的路径            request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, apkName);            //获取DownloadManager            mDownloadManager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE);            downloadId = mDownloadManager.enqueue(request);            mContext.registerReceiver(mReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));        }    }    private BroadcastReceiver mReceiver = new BroadcastReceiver() {        @Override        public void onReceive(Context context, Intent intent) {            checkStatus();        }    };    /**     * 检查下载状态     */    private void checkStatus() {        DownloadManager.Query query = new DownloadManager.Query();        query.setFilterById(downloadId);        Cursor cursor = mDownloadManager.query(query);        if (cursor.moveToFirst()) {            int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));            switch (status) {                //下载暂停                case DownloadManager.STATUS_PAUSED:                    break;                //下载延迟                case DownloadManager.STATUS_PENDING:                    break;                //正在下载                case DownloadManager.STATUS_RUNNING:                    break;                //下载完成                case DownloadManager.STATUS_SUCCESSFUL:                    installAPK();                    break;                //下载失败                case DownloadManager.STATUS_FAILED:                    Toast.makeText(mContext, "下载失败", Toast.LENGTH_SHORT).show();                    break;            }        }        cursor.close();    }    /**     * 7.0兼容     */    private void installAPK() {        File apkFile =                new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), apkName);        Intent intent = new Intent(Intent.ACTION_VIEW);        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {            Uri apkUri = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".provider", apkFile);            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);            intent.setDataAndType(apkUri, "application/vnd.android.package-archive");        } else {            intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");        }        mContext.startActivity(intent);    }}

版本对比

 /**     * 版本号比较     *     * @param version1     * @param version2     * @return     */    public static int compareVersion(String version1, String version2) {        if (version1.equals(version2)) {            return 0;        }        String[] version1Array = version1.split("\\.");        String[] version2Array = version2.split("\\.");        Log.d("HomePageActivity", "version1Array=="+version1Array.length);        Log.d("HomePageActivity", "version2Array=="+version2Array.length);        int index = 0;        // 获取最小长度值        int minLen = Math.min(version1Array.length, version2Array.length);        int diff = 0;        // 循环判断每位的大小        Log.d("HomePageActivity", "verTag2=2222="+version1Array[index]);        while (index < minLen                && (diff = Integer.parseInt(version1Array[index]) - Integer.parseInt(version2Array[index])) == 0) {            index++;        }        if (diff == 0) {            // 如果位数不一致,比较多余位数            for (int i = index; i < version1Array.length; i++) {                if (Integer.parseInt(version1Array[i]) > 0) {                    return 1;                }            }            for (int i = index; i < version2Array.length; i++) {                if (Integer.parseInt(version2Array[i]) > 0) {                    return -1;                }            }            return 0;        } else {            return diff > 0 ? 1 : -1;        }    }

调用:
检测应用的当前版本号。与服务端最新版本号进行比较。

xie

更多相关文章

  1. android HTTPS 访问 安全认证
  2. Android(安卓)studio 统一管理依赖版本号
  3. android 系统中修改系统的版本号
  4. Android高效的应用程序开发工具集1---ant构建一个简单的Android
  5. 使用 Xcode 和 Android Studio 管理 iOS 和 Android 项目版本
  6. Android小项目之三 splash界面
  7. [置顶] ADT版本号超过17后,所遇到的问题,如导入项目没有Android De

随机推荐

  1. Android(安卓)设置DrawableRight和Drawab
  2. Android高手进阶教程(二)之 ----Android(
  3. Unity3d和Android之间互相调用
  4. Android常见的存储方式
  5. 基于Android智能终端的远程控制系统
  6. Android基础入门教程——7.2.1 Android(
  7. Android(安卓)系统启动过程
  8. Android(安卓)网络请求框架之Rxjava+Retr
  9. JBuilder2005实战JSP之登录页面实现代码[
  10. Swoole扩展的6种模式深入详解