目录

1.配置:

1.1 AndroidManifest.xml中添加权限和FileProvider

1.2 新建文件(路径:res\xml\file_paths.xml)

1.3 (app的)build.gradle

2.这里以点击按钮进行更新为例

2.1 核心代码

2.2 DataRequestListener

2.3 AppUpdateUtil

2.4 IntentUtil

2.5 FileUtil

3.遇到的问题

9.0手机authorities配置出错,导致无法安装, 解决办法


1.配置:

1.1 AndroidManifest.xml中添加权限和FileProvider

    <uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
  <providerandroid:name="androidx.core.content.FileProvider"android:authorities="com.fengzhi.wuyemanagement.fileprovider"android:grantUriPermissions="true"android:exported="false"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" /></provider>

1.2 新建文件(路径:res\xml\file_paths.xml)

<paths><external-path path="." name="external_storage_root" />
</paths>

1.3 (app的)build.gradle

  //okgo 网络请求implementation "com.lzy.net:okgo:3.0.4"//gsonimplementation 'com.google.code.gson:gson:2.8.2'//权限implementation "org.permissionsdispatcher:permissionsdispatcher:4.3.1"//权限annotationProcessor "org.permissionsdispatcher:permissionsdispatcher-processor:4.3.1"

2.这里以点击按钮进行更新为例

2.1 核心代码

    private int version;/* 更新进度条 */private ProgressBar mProgress;private AlertDialog mDownloadDialog;--------------------------------------------------------------------------------------------------------------------//点击按钮,检查权限,,,检查更新的方法@NeedsPermission({Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.REQUEST_INSTALL_PACKAGES})protected void checkUpdate() {showLoadingDialog("检测更新中...");version = AppUpdateUtil.getAppVersionCode(this);//检查当前版本号
//      调用方法,,,接口的具体实现,接收传过来的参数,再调自己的方法,requestAppUpdate(version, new DataRequestListener<UpdateAppBean>() {@Overridepublic void success(UpdateAppBean data) {
//                返回的json,getStatus为0时,去下载apk文件,这里是下载apk文件的方法updateApp(data.getData().getApk_url());}@Overridepublic void fail(String msg) {
//                返回的json,getStatus为1时,提示:"已是最新版本!"SToast(msg);dismissLoadingDialog();}});}//检查版本号,第一次请求(post),,,UpdateAppBean根据服务器返回生成private void requestAppUpdate(int version, final DataRequestListener<UpdateAppBean> listener) {OkGo.<String>post(Const.HOST_URL + Const.UPDATEAPP).params("version", version).execute(new StringCallback() {@Overridepublic void onSuccess(Response<String> response) {Gson gson = new Gson();UpdateAppBean updateAppBean = gson.fromJson(response.body(), UpdateAppBean.class);if (updateAppBean.getStatus() == 0) {listener.success(updateAppBean);} else {listener.fail(updateAppBean.getMsg());}}@Overridepublic void onError(Response<String> response) {listener.fail("服务器连接失败");dismissLoadingDialog();}});}//如果有新版本,提示有新的版本,然后下载apk文件private void updateApp(String apk_url) {dismissLoadingDialog();DialogUtils.getInstance().showDialog(this, "发现新的版本,是否下载更新?",new DialogUtils.DialogListener() {@Overridepublic void positiveButton() {downloadApp(apk_url);}});}//下载apk文件并跳转(第二次请求,get)private void downloadApp(String apk_url) {OkGo.<File>get(apk_url).tag(this).execute(new FileCallback() {@Overridepublic void onSuccess(Response<File> response) {String filePath = response.body().getAbsolutePath();Intent intent = IntentUtil.getInstallAppIntent(mContext, filePath);
//                测试过这里必须用startactivity,不能用stratactivityforresultmContext.startActivity(intent);dismissLoadingDialog();mDownloadDialog.dismiss();mDownloadDialog=null;}@Overridepublic void downloadProgress(Progress progress) {
//                        showDownloadDialog();
//                        mProgress.setProgress((int) (progress.fraction * 100));if (mDownloadDialog == null) {// 构造软件下载对话框AlertDialog.Builder builder = new AlertDialog.Builder(mContext);builder.setTitle("正在更新");// 给下载对话框增加进度条final LayoutInflater inflater = LayoutInflater.from(mContext);View v = inflater.inflate(R.layout.item_progress, null);mProgress = (ProgressBar) v.findViewById(R.id.update_progress);builder.setView(v);mDownloadDialog = builder.create();mDownloadDialog.setCancelable(false);mDownloadDialog.show();}mProgress.setProgress((int) (progress.fraction * 100));}});}

2.2 DataRequestListener

public interface DataRequestListener<T> {//请求成功void success(T data);//请求失败void fail(String msg);
}

2.3 AppUpdateUtil

/*** 获取App版本码** @param context 上下文* @return App版本码*/public static int getAppVersionCode(Context context) {return getAppVersionCode(context, context.getPackageName());}

2.4 IntentUtil

public class IntentUtil {/*** 获取安装App(支持7.0)的意图** @param context* @param filePath* @return*/public static Intent getInstallAppIntent(Context context, String filePath) {//apk文件的本地路径File apkfile = new File(filePath);if (!apkfile.exists()) {return null;}Intent intent = new Intent(Intent.ACTION_VIEW);Uri contentUri = FileUtil.getUriForFile(context, apkfile);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);}intent.setDataAndType(contentUri, "application/vnd.android.package-archive");return intent;}

2.5 FileUtil

/*** 将文件转换成uri(支持7.0)** @param mContext* @param file* @return*/public static Uri getUriForFile(Context mContext, File file) {Uri fileUri = null;if (Build.VERSION.SDK_INT >= 24) {fileUri = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".fileprovider", file);} else {fileUri = Uri.fromFile(file);}return fileUri;}

3.遇到的问题

9.0手机authorities配置出错,导致无法安装, 解决办法

项目中使用了Androidx,AndroidManifest.xml的配置中就必须使用androidx的fileprovider
这里的authorities与FileUtil.java中的要一样,我就是字母P大写了导致错误

Android APK下载安装(自动更新)相关推荐

  1. android 系统(143)---Android实现App版本自动更新

    Android实现App版本自动更新 现在很多的App中都会有一个检查版本的功能.例如斗鱼TV App的设置界面下: 当我们点击检查更新的时候,就会向服务器发起版本检测的请求.一般的处理方式是:服务器 ...

  2. android应用程序的自动更新升级(自身升级,通过tomcat),[SaltStack] Minion-conf自动更新...

    minion-conf配置文件自动更新, 加载 minion-conf是每个minion自身以来的配置, 为了方便我们在中心管控机上(Master)统一配置, 然后下发文件, 进而使得Minion能够 ...

  3. Kali Linux攻防系统(一:攻防系统Kali Linux下载安装与更新)

    任务一:攻防系统Kali Linux下载安装与更新 1.1.安装Kali Linux虚拟机 1.1.1.电脑硬件配置至少达到 CPU 内存 存储 >四核 >4G >20G 1.1.2 ...

  4. Windows Android SDK下载安装,配置,异常问题解决教程

    Windows Android SDK下载安装,配置,异常问题解决教程 参考文章: (1)Windows Android SDK下载安装,配置,异常问题解决教程 (2)https://www.cnbl ...

  5. android 闪退解决方案,Android apk无法安装及闪退问题解决办法

    Android apk无法安装及闪退问题 app在部分手机上(低版本)打不开或打开就闪退的问题 之前做项目集成的是 环信的sdk ,环信的sdk 确实很好,客服 也很给力.但是在集成的过程中发现,ap ...

  6. IIS 添加mime 支持 apk,exe,.woff,IIS MIME设置 ,Android apk下载的MIME 设置 苹果ISO .ipa下载mime 设置...

    IIS 添加mime 支持 apk,exe,.woff,IIS MIME设置 ,Android apk下载的MIME 设置 苹果ISO .ipa下载mime 设置 原文:IIS 添加mime 支持 a ...

  7. jenkins依赖的android sdk下载安装

    jenkins下android sdk下载安装 一:Android SDK 二:SDK Tools 三:Android SDK Licences 一:Android SDK 下载地址:http://t ...

  8. android apk下载完成后调用安装

    一般应用里下载完apk的话都会自动调取安装apk的方法,在下载完成后直接调用下面这个方法即可调用apk安装功能 public static void install(Activity activity ...

  9. android自动点击adb,自动点击器adb手机安卓软件下载安装-自动点击器adb免root最新版下载v1.0.5-乐游网软件下载...

    <自动点击器adb>是一款非常实用的自动手机点击软件,软件可以在不生成脚本,不需要root的情况下模拟真实的点击,帮助用户解决手机中需要不断点击的情况,软件的操作简单容易上手,当然功能比需 ...

  10. Android如何实现APP自动更新

    先来看看要实现的效果图: 对于安卓用户来说,手机应用市场说满天飞可是一点都不夸张,比如小米,魅族,百度,360,机锋,应用宝等等,当我们想上线一款新版本APP时,先不说渠道打包的麻烦,单纯指上传APP ...

最新文章

  1. idea python-IntelliJ IDEA安装运行python插件方法
  2. 2018年安卓绿色联盟数据报告
  3. Mybatis解决字段名与实体类属性名不相同的冲突
  4. 微信8年,你从中学到了什么?
  5. JUC系列(六) | Callable和Future接口详解使用、FutureTask应用 获取异步线程返回值
  6. win10连接烟台大学校园网
  7. Intel 64/x86_64/IA-32/x86处理器 - 锁原子操作(1) - 处理器保证的原子操作
  8. javaweb基础 - Servlet
  9. 一步步学习SPD2010--第二章节--处理SP网站(9)---- 关键点
  10. Core、处理器(CPU)核、处理器(CPU)、处理器(CPU)架构、微结构、指令集、指令集架构、ARMv7 内核架构
  11. Mac快速录制音频工具:Recordia
  12. spring boot 启动报错:Reason: Canonical names should be kebab-case ('-' separated), lowercase
  13. Atlassian与DevOps 系列产品选择方案介绍
  14. 怎么屏蔽还有照片_【文末福利】在朋友圈发男神照片忘了屏蔽父母,麻麻的回应亮了…...
  15. Android画图方式
  16. python 类属性函数,python_30期【类包含属性和函数】
  17. excel换行快捷键_实用 excel 最实用快捷键大全
  18. mysql格式化日期和时间
  19. osgEarth目标选择
  20. C语言自学路之计算平方(输入验证)

热门文章

  1. win10下的MyEclipse2017 ci7 破解教程+全套资源+失败处理
  2. mysql 安装版本选择_选择要安装的MySQL版本
  3. Excel对比两个Sheet数据的异同
  4. SEO 移动搜索优化
  5. 机器学习算法工程师面试问题
  6. 某大厂算法工程师面试题详解,问题+答案
  7. [转]DRP系统知识点总结
  8. 视频播放神器——PotPlayer基本设置
  9. 《muduo网络库》学习笔记——TcpClient剖析
  10. 大学本科计算机专业的课程