123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- package com.bgy.autosale.payutil;
- import android.app.Activity;
- import android.app.DownloadManager;
- import android.content.BroadcastReceiver;
- import android.content.Context;
- import android.content.Intent;
- import android.content.IntentFilter;
- import android.database.Cursor;
- import android.net.Uri;
- import android.os.Build;
- import android.util.Log;
- import android.widget.Toast;
- /**
- * 用于在原生上安装的应用
- */
- public class DownloadUtils {
- //下载器
- private DownloadManager downloadManager;
- //上下文
- private Activity mContext;
- //下载的ID
- private long downloadId;
- public DownloadUtils(Activity context) {
- this.mContext = context;
- }
- //下载apk
- public void downloadAPK(String url, String name) {
- //创建下载任务
- DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));
- //移动网络情况下是否允许漫游
- request.setAllowedOverRoaming(false);
- //在通知栏中显示,默认就是显示的
- request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
- request.setTitle("新版本apk");
- request.setDescription("经理平板apk下载");
- request.setVisibleInDownloadsUi(true);
- //设置下载的路径
- // request.setDestinationInExternalPublicDir(Environment.getExternalStorageDirectory().getAbsolutePath() , name);
- //获取DownloadManager
- downloadManager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE);
- //将下载请求加入下载队列,加入下载队列后会给该任务返回一个long型的id,通过该id可以取消任务,重启任务、获取下载的文件等等
- downloadId = downloadManager.enqueue(request);
- //注册广播接收者,监听下载状态
- mContext.registerReceiver(receiver,
- new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
- }
- //广播监听下载的各个状态
- private BroadcastReceiver receiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- checkStatus();
- }
- };
- //检查下载状态
- private void checkStatus() {
- DownloadManager.Query query = new DownloadManager.Query();
- //通过下载的id查找
- query.setFilterById(downloadId);
- Cursor c = downloadManager.query(query);
- if (c.moveToFirst()) {
- int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS));
- Log.d("TTT", "检查下载进度 " + status);
- switch (status) {
- //下载暂停
- case DownloadManager.STATUS_PAUSED:
- break;
- //下载延迟
- case DownloadManager.STATUS_PENDING:
- break;
- //正在下载
- case DownloadManager.STATUS_RUNNING:
- break;
- //下载完成
- case DownloadManager.STATUS_SUCCESSFUL:
- //下载完成安装APK
- installAPK();
- break;
- //下载失败
- case DownloadManager.STATUS_FAILED:
- Toast.makeText(mContext, "下载失败", Toast.LENGTH_SHORT).show();
- break;
- }
- }
- c.close();
- }
- //下载到本地后执行安装
- private void installAPK() {
- //获取下载文件的Uri
- Uri downloadFileUri = downloadManager.getUriForDownloadedFile(downloadId);
- Log.d("TTT", "installAPK " + downloadFileUri);
- if (downloadFileUri != null) {
- boolean allow = true;
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
- allow = mContext.getPackageManager().canRequestPackageInstalls();
- }
- Log.d("TTTT", "没有权限更新应用");
- Intent intent = new Intent(Intent.ACTION_VIEW);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
- //添加这一句表示对目标应用临时授权该Uri所代表的文件
- intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
- }
- intent.setDataAndType(downloadFileUri, "application/vnd.android.package-archive");
- mContext.startActivity(intent);
- mContext.unregisterReceiver(receiver);
- }
- }
- }
|