«

Android 版本升级(APK下载和安装)

时间:2024-3-2 18:16     作者:韩俊     分类: Android


将手机上应用版本号等相关信息发送到服务器,服务器检测是否有新版本。如果有新版本,将返回客户端版本号、版本名称、下载地址、版本更新说明等信息。客户端获取到此信息后,将询问用户是否下载,确定后,开始下载。下载完成后开始提示安装。


调用系统DownloadManager实现下载:

DownloadManager downloadManager = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
DownloadManager.Request request = new DownloadManager.Request( 版本下载地址);

request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "xxx.apk");//将apk下载到download默认目录
request.allowScanningByMediaScanner();
request.setMimeType("application/cn.trinea.download.file");
long downloadId = downloadManager.enqueue(request);//每个下载请求对应一个downloadId

PrefUtils.setLong(PrefUtils.DOWNLOAD_ID, downloadId);//暂存到Preference中

下载完成后,将发送DownloadManager.ACTION_DOWNLOAD_COMPLETE广播。因此需要建立一个Broadcast Receiver来接收广播,确认下载成功后进行安装提示。


public class DownloadCompleteReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        long completeDownloadId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);

        if (completeDownloadId != -1 && completeDownloadId == PrefUtils.getLong(PrefUtils.DOWNLOAD_ID, -1)) {

            DownloadManager downloadManager = (DownloadManager) context.getSystemService(Context.DOWNLOAD_SERVICE);
            DownloadManager.Query query = new DownloadManager.Query().setFilterById(completeDownloadId);
            Cursor cursor = null;
            String filename = null;
            try {
                cursor = downloadManager.query(query);
                if (cursor != null && cursor.moveToFirst()) {

                    filename = cursor.getString(cursor.getColumnIndexOrThrow(DownloadManager.COLUMN_LOCAL_FILENAME));
                }
            } finally {
                if (cursor != null) {
                    cursor.close();
                }
            }

            if (!TextUtils.isEmpty(filename)) {

                Intent installIntent = new Intent(Intent.ACTION_VIEW);
                installIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                installIntent.setDataAndType(Uri.fromFile(new File(filename)),"application/vnd.android.package-archive");
                context.startActivity(installIntent);
            }
        }

    }

}


标签: android

热门推荐