Android 自己实现更新下载自动安装
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 自己实现更新下载自动安装相关推荐
- Android开发APK更新下载自动安装打开
private ProgressBar downLoadPB; //下载APK进度条private TextView allMount; //显示APK总大小的控件 private TextView ...
- Android SDK 2.1 下载与安装教程
Android SDK 2.1 下载与安装教程 一.Google已经发布了Android SDK 2.1版本.下面给朋友们介绍一下安装2.1的 Android 模拟器 Emulator模拟器的方法: ...
- React Native安卓实现更新下载、安装
使用ReactNative开发,APP免不了需要更新的功能,iOS直接使用Linking跳转App Store即可,而Android则略显麻烦,需要通过封装Native Modules去调用Andro ...
- 【Android工具】更新小米电视安装小白云盘观看阿里网盘视频资源方法
微信关注公众号 "DLGG创客DIY" 设为"星标",重磅干货,第一时间送达. 之前分享过两篇关于安卓电视看网盘资源的方法: [Android工具]安卓TV云存 ...
- android版 点击下载,自动点击器最新版
<自动点击器 最新版>是一款非常实用的连点工具应用.有些朋友可能时常抱怨抢不到红包,还有些游戏操做需要不断的点击,非常的麻烦,但是有了这款应用,只需要设置好点击的间隔频率,就能帮助你放开双 ...
- Android Studio和SDK下载、安装和环境变量配置(全网最详细步骤)
序言:工欲善其事,必先利其器,无论你是搞Android开发的.测试App软件的.App爬虫等都需要建立Android环境 目录 一.安装Java JDK 1.1 首先必须安装Java JDK 1.2 ...
- Android 下载 自动安装 解析错误,studio下载APK到手机提示解析错误解决方法
下载完Android studio,第一件事就是想写hello world,照着第一行代码,新建project,建立一个已经搭好框架的activity,make然后run,很快就执行完成,下图是在选择 ...
- android 下载完成 自动安装失败,下载自动安装apk(android10)
首先是下载的时候,文件下不下来,加了权限也不行. 需要在AndroidManifest中配置一下 ... android:requestLegacyExternalStorage="true ...
- android 版本更新 apk,Android 版本升级(APK下载和安装)
将手机上应用版本号等相关信息发送到服务器,服务器检测是否有新版本.如果有新版本,将返回客户端版本号.版本名称.下载地址.版本更新说明等信息.客户端获取到此信息后,将询问用户是否下载,确定后,开始下载. ...
最新文章
- 神秘的中国超算:比肩高铁的世界级领先
- 在vue.js中省市选择
- CTFshow 信息收集 web16
- 集合-1(Collection、迭代器、Collections、泛型)
- idea一键加密部署springboot到docker容器
- 哪些因素造成外贸网站没效果?
- 3991. 满足条件的01串-AcWing题库
- CISSP考试指南笔记:1.2安全定义
- Python接口自动化测试
- 基于Java实现大学生求职招聘信息网站系统
- 软件测试常见分辨率测试,兼容测试:常见的显示器分辨率
- 分子动力学模拟之周期性边界处理
- methodinvocationexception: property ‘driverclassname‘ threw exception; nested exception is java.lang
- 回溯法解决部落冲突问题
- Embedding Propagation: Smoother Manifold for Few-Shot Classification ECCV 2020
- groupby后选取列和不选取列的区别
- html转pdf文件下载之最合理的方法支持中文
- Freemaker之代码生成
- 推荐很nice英文文献翻译软件
- Cantor 表 {C语言解法}