1、一些公司开发完一款App之后可能并不会去上架App商店,但事后期也需要定时进行维护更新,所以会选择把打包好的apk 发布到自己的服务器,然后在数据库建一个版本号的表,然后剩下的就交给你android开发了,android自己要实现版本检测更新,由于android自带的DownloadManager 就可以实现下载功能,用起来就会很简单了,不用再写很多下载等相关代码了,不过在下载完有的是在通知栏通知,然后用户自己手动点击进行安装,有的是下载完自己就进入安装状态了,用户只需要确认安装就可以了,但是由于一些高版本的系统和低版本的自动安装不同,这里就简单介绍一下,然大家能很快的处理这个事情,我就是在这个自动安装这块弄了有好几天不知道怎么回事,先总结一下:

2、这里就从开始下载开始,那些版本号的请求就不提了,,

这里我们可以先写一个工具类Util,然后顶一个静态方法downLoadApk();

eg:

/*** 更新下载apk* @param context  上下文对象* @param title    程序的名字* @param url       下载的url地址**/public static long downLoadApk(Context context,String title,String url){DownloadManager.Request request = new DownloadManager.Request(Uri.parse(url));request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI);request.setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS,"ausee.apk");request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);// 设置 Notification 信息request.setTitle(title);request.setDescription("下载完成后请点击打开");request.setVisibleInDownloadsUi(true);request.allowScanningByMediaScanner();request.setMimeType("application/vnd.android.package-archive");// 实例化DownloadManager 对象DownloadManager downloadManager = (DownloadManager) MyApp.getContext().getSystemService(Context.DOWNLOAD_SERVICE);final long refrence = downloadManager.enqueue(request);return refrence;
}
上面的那个静态方法就可以实现下载了,把url传过去就OK了;下面就来处理剩下的,大家注意上面的方法会返回一个long类型的值

大家在activity调用这个方法的时候,拿到这个返回值,然后在activity里面建一个广播接收器,因为上面的返回值是DownloadManager 下载完后返回的一个下载id,自带的,每一个下载任务都会返回一个唯一的id,并且会发一条广播,这里我在activity里面定义一个方法:listener(id),并建一个广播接受器; 如下

private void listener(final long Id) {// 注册广播监听系统的下载完成事件。IntentFilter intentFilter = new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE);broadcastReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {DownloadManager manager = (DownloadManager)context.getSystemService(Context.DOWNLOAD_SERVICE);// 这里是通过下面这个方法获取下载的id,long ID = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, -1);// 这里把传递的id和广播中获取的id进行对比是不是我们下载apk的那个id,如果是的话,就开始获取这个下载的路径if (ID == Id) {DownloadManager.Query query = new DownloadManager.Query();query.setFilterById(Id);Cursor cursor = manager.query(query);if (cursor.moveToFirst()){// 获取文件下载路径String fileName = cursor.getString(cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI));// 如果文件名不为空,说明文件已存在,则进行自动安装apkif (fileName != null){openAPK(fileName);}}cursor.close();}}};registerReceiver(broadcastReceiver, intentFilter);
}
下面是上面的自动打开apk的方法:
/*** 安装apk* @param fileSavePath*/
private void openAPK(String fileSavePath){File file=new File(Uri.parse(fileSavePath).getPath());String filePath = file.getAbsolutePath();Intent intent = new Intent(Intent.ACTION_VIEW);Uri data = null;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {//判断版本大于等于7.0// 生成文件的uri,,// 注意 下面参数com.ausee.fileprovider 为apk的包名加上.fileprovider,data = FileProvider.getUriForFile(LoginActivity.this, "com.ausee.fileprovider", new File(filePath));intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);// 给目标应用一个临时授权} else {data = Uri.fromFile(file);}intent.setDataAndType(data, "application/vnd.android.package-archive");startActivity(intent);
}
上面基本就可以了,但是上面的那个参数com.ausee.fileprovider,这个需要注意,进行下面的配置
先在项目res文件下新建一个文件夹名字为 xml ;后新建一个xml的文件:file_paths.xml;
xml中内容为:
<?xml version="1.0" encoding="utf-8"?>
<paths><external-path name="name" path="."/>
</paths>

这里写好之后,下面在manifest里面配置一个provider标签:这么写就可以:

<providerandroid:name="android.support.v4.content.FileProvider"android:authorities="com.ausee.fileprovider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths" />
</provider>

仔细看上面的 android:authorities="com.ausee.fileprovider" (com.ausee为你自己的包名),这个内容和前面的那个参数一样的吧?就是因为这里,这里的内容也是那样填写的,包名加上一个fileprovider 就可以了,然后在meta-data 里面把刚开配置的xml文件配置进来就可以!

好了,到这里就完工了,快去试试吧!

Android 自己实现更新下载自动安装相关推荐

  1. Android开发APK更新下载自动安装打开

    private ProgressBar downLoadPB; //下载APK进度条private TextView allMount; //显示APK总大小的控件 private TextView ...

  2. Android SDK 2.1 下载与安装教程

    Android SDK 2.1 下载与安装教程 一.Google已经发布了Android SDK 2.1版本.下面给朋友们介绍一下安装2.1的 Android 模拟器 Emulator模拟器的方法: ...

  3. React Native安卓实现更新下载、安装

    使用ReactNative开发,APP免不了需要更新的功能,iOS直接使用Linking跳转App Store即可,而Android则略显麻烦,需要通过封装Native Modules去调用Andro ...

  4. 【Android工具】更新小米电视安装小白云盘观看阿里网盘视频资源方法

    微信关注公众号 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 之前分享过两篇关于安卓电视看网盘资源的方法: [Android工具]安卓TV云存 ...

  5. android版 点击下载,自动点击器最新版

    <自动点击器 最新版>是一款非常实用的连点工具应用.有些朋友可能时常抱怨抢不到红包,还有些游戏操做需要不断的点击,非常的麻烦,但是有了这款应用,只需要设置好点击的间隔频率,就能帮助你放开双 ...

  6. Android Studio和SDK下载、安装和环境变量配置(全网最详细步骤)

    序言:工欲善其事,必先利其器,无论你是搞Android开发的.测试App软件的.App爬虫等都需要建立Android环境 目录 一.安装Java JDK 1.1 首先必须安装Java JDK 1.2 ...

  7. Android 下载 自动安装 解析错误,studio下载APK到手机提示解析错误解决方法

    下载完Android studio,第一件事就是想写hello world,照着第一行代码,新建project,建立一个已经搭好框架的activity,make然后run,很快就执行完成,下图是在选择 ...

  8. android 下载完成 自动安装失败,下载自动安装apk(android10)

    首先是下载的时候,文件下不下来,加了权限也不行. 需要在AndroidManifest中配置一下 ... android:requestLegacyExternalStorage="true ...

  9. android 版本更新 apk,Android 版本升级(APK下载和安装)

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

最新文章

  1. 神秘的中国超算:比肩高铁的世界级领先
  2. 在vue.js中省市选择
  3. CTFshow 信息收集 web16
  4. 集合-1(Collection、迭代器、Collections、泛型)
  5. idea一键加密部署springboot到docker容器
  6. 哪些因素造成外贸网站没效果?
  7. 3991. 满足条件的01串-AcWing题库
  8. CISSP考试指南笔记:1.2安全定义
  9. Python接口自动化测试
  10. 基于Java实现大学生求职招聘信息网站系统
  11. 软件测试常见分辨率测试,兼容测试:常见的显示器分辨率
  12. 分子动力学模拟之周期性边界处理
  13. methodinvocationexception: property ‘driverclassname‘ threw exception; nested exception is java.lang
  14. 回溯法解决部落冲突问题
  15. Embedding Propagation: Smoother Manifold for Few-Shot Classification ECCV 2020
  16. groupby后选取列和不选取列的区别
  17. html转pdf文件下载之最合理的方法支持中文
  18. Freemaker之代码生成
  19. 推荐很nice英文文献翻译软件
  20. Cantor 表 {C语言解法}

热门文章

  1. 计算机验证型数学实验报告,数学建模实验报告1.doc
  2. python中cfg_python操作cfg配置文件方式
  3. oracle 备份命令
  4. Excel函数不生效的一种情况
  5. 正常性入职岗前培训(非培训机构的实习生入职培训)---基础知识总结
  6. 如何制作自己的C++游戏引擎
  7. 自定义控件:圆形进度条的实现
  8. 什么是冰山模型,冰山模型的三层结构
  9. c语言编程 0-6的数字对应星期,输入一个数字0~6 用中英文显示星期几 如何用vb编程...
  10. SDCC 2015中国软件开发者大会盛大开幕