网站首页
android-采坑-webview-下载安装APK文件
发布时间:2019-07-18 06:49查看次数:3112
安卓6.0以后安装好麻烦~~~经过采坑 Google + 百度 +GitHub 最后完成文件如下
兼容6.0 7.0 8.0 以上所有版本的安装类
sdk使用版本 compileSdkVersion 29 defaultConfig { applicationId "com.example.administrator.a20190718" minSdkVersion 22 targetSdkVersion 26 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" }
注册私有权限 //XML 下资源文件名称
RES\XML\file_path.xml 内容如下
安装类源码如下:package com.zhh.test.utils; import android.app.Activity; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.provider.Settings; import android.support.annotation.RequiresApi; import android.support.v4.content.FileProvider; import android.support.v7.app.AlertDialog; import java.io.File; public class InstallUtil { private Activity mAct; private String mPath;//下载下来后文件的路径 public static int UNKNOWN_CODE = 2018; public InstallUtil(Activity mAct, String mPath) { this.mAct = mAct; this.mPath = mPath; } public void install(){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) startInstallO(); else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) startInstallN(); else startInstall(); } /** * android1.x-6.x */ private void startInstall() { Intent install = new Intent(Intent.ACTION_VIEW); install.setDataAndType(Uri.parse("file://" + mPath), "application/vnd.android.package-archive"); install.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mAct.startActivity(install); } /** * android7.x */ private void startInstallN() { //参数1 上下文, 参数2 在AndroidManifest中的android:authorities值, 参数3 共享的文件 Uri apkUri = FileProvider.getUriForFile(mAct,"com.zhh.test.fileprovider", new File(mPath)); Intent install = new Intent(Intent.ACTION_VIEW); //由于没有在Activity环境下启动Activity,设置下面的标签 install.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //添加这一句表示对目标应用临时授权该Uri所代表的文件 install.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); install.setDataAndType(apkUri, "application/vnd.android.package-archive"); mAct.startActivity(install); } /** * android8.x */ @RequiresApi(api = Build.VERSION_CODES.O) private void startInstallO() { boolean isGranted = mAct.getPackageManager().canRequestPackageInstalls(); if (isGranted) startInstallN();//安装应用的逻辑(写自己的就可以) else new AlertDialog.Builder(mAct) .setCancelable(false) .setTitle("安装应用需要打开未知来源权限,请去设置中开启权限") .setPositiveButton("确定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface d, int w) { Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES); mAct.startActivityForResult(intent, UNKNOWN_CODE); } }) .show(); } }
使用方法:
InstallUtil install = new InstallUtil(MainActivity.this,mSavePath+"/"+mVersion_name); 第一参数是context 第二个是包下载完成后存储的路径 install.install(); //安装
调用系统的浏览器下载...好处是兼容性非常好/坏处是展示不够友好
调用系统的DOMNLOADM 管理器下载 (从来没有折腾成功过)
自定义下载安装,这里有个问题是网络那一部分比较复杂 不知道能不能适用 暂停 续传 停止
2019年7月18日14:48:33 深圳 宝安 德玛西亚 2019 注定平平淡淡的一年
进步的脚步不能停歇~~~~ 感觉倒退了 好多~
源码再此:
android-采坑-webview-下载安装APK文件
使用方法:
总结:在学习webview下载文件过程中共有3个下载文件的方法
关键字词:EGRET##android