关于8.0的一个一个apk的下载更新,由于做的软件是内部用的,所以之前8.0的还是很少,一直也不知道会出现问题。但是后来领导突然提出来了,所以就更新了一下。

其实8.0和7.0相比其实就一个权限的添加。
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

下面完整下载代码

在res下的xml创建名字为provider_paths的文件
<?xml version="1.0" encoding="utf-8"?>
<paths <external-pathpath="." name="files_path" />
</paths>

在application下创建provider

<providerandroid:name="android.support.v4.content.FileProvider"android:authorities="${applicationId}.provider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/provider_paths" /></provider>

java代码

拿取当前版本和服务器返回的版本想对比,如果低于服务器就开始下载

以下是在fragment中做的下载动作。

在buide.gradle中添加依赖,也就是下面动态申请权限的一个依赖

compile 'com.tbruyelle.rxpermissions:rxpermissions:0.7.0@aar'

compile 'io.reactivex:rxjava:1.1.6' //需要引入RxJava

//动态申请权限
private void quanxian(){RxPermissions.getInstance(getActivity())// 申请权限.request(Manifest.permission.WRITE_EXTERNAL_STORAGE).subscribe(new Action1<Boolean>() {@Overridepublic void call(Boolean granted) {if(granted){//请求成功showNoticeDialog();}else{// 请求失败回收当前服务}}});}//更新当前app版本private void showNoticeDialog() {// 更新AlertDialog.Builder dialog = new AlertDialog.Builder(getActivity());dialog.setTitle("检测到新版本,立即更新吗").setMessage("检测到新版本,立即更新吗").setMessage("更新内容:\n")//更新内容根据拿取版本时候服务器返回的进行书写.setPositiveButton("更新", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();Toast.makeText(getActivity(), "正在通知栏下载中", Toast.LENGTH_SHORT).show();// 显示下载对话框showDownloadDialog();}});dialog.setNegativeButton("下次再说", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {dialog.dismiss();}});dialog.setCancelable(false);dialog.show();}/*** 显示软件下载对话框*/private void showDownloadDialog() {String downPath = http://xiaz.apk;//下载路径 根据服务器返回的apk存放路径//使用系统下载类mDownloadManager = (DownloadManager) getActivity().getSystemService(DOWNLOAD_SERVICE);Uri uri = Uri.parse(downPath);DownloadManager.Request request = new DownloadManager.Request(uri);request.setAllowedOverRoaming(false);//创建目录下载request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "下载.apk");// 把id保存好,在接收者里面要用downloadId = mDownloadManager.enqueue(request);//设置允许使用的网络类型,这里是移动网络和wifi都可以request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI);//机型适配request.setMimeType("application/vnd.android.package-archive");//通知栏显示request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);request.setTitle("下载");request.setDescription("正在下载中...");request.setVisibleInDownloadsUi(true);getActivity().registerReceiver(mReceiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));}private BroadcastReceiver mReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {checkStatus();}};/*** 检查下载状态*/private void checkStatus() {DownloadManager.Query query = new DownloadManager.Query();query.setFilterById(downloadId);Cursor cursor = mDownloadManager.query(query);if (cursor.moveToFirst()) {int status = cursor.getInt(cursor.getColumnIndex(DownloadManager.COLUMN_STATUS));switch (status) {//下载暂停case DownloadManager.STATUS_PAUSED:break;//下载延迟case DownloadManager.STATUS_PENDING:break;//正在下载case DownloadManager.STATUS_RUNNING:break;//下载完成case DownloadManager.STATUS_SUCCESSFUL:installAPK();break;//下载失败case DownloadManager.STATUS_FAILED:Toast.makeText(getActivity(), "下载失败", Toast.LENGTH_SHORT).show();break;}}cursor.close();}/*** 7.0兼容*/private void installAPK() {File apkFile =new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "下载.apk");Intent intent = new Intent(Intent.ACTION_VIEW);intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {Uri apkUri = FileProvider.getUriForFile(getActivity(), getActivity().getPackageName() + ".provider", apkFile);intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);intent.setDataAndType(apkUri, "application/vnd.android.package-archive");} else {intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive");}getActivity().startActivity(intent);}

Android 8.0版本更新下载相关推荐

  1. Android 4.0 SDK下载安装

    Android 4.0 SDK已正式发布,大家可以在 http://dl.goo...4-windows.exe 直接使用这个工具下载,当然如果你已经有早期版本的SDK,在SDK Manager中检查 ...

  2. 华为 android 5.0系统下载地址,华为emui5.0升级公告-emui 5.0官方版下载v5.0 官方最新版-西西软件下载...

    emui5.0是关于华为最新的开发的一个手机的系统,对比其他的安卓系统来说,emui5.0的使用的界面可以说是十分的简洁,而且使用起来的体验也是十分的流畅,让用户能够享受到一个很不错的操作系统的体验, ...

  3. 华为 android 5.0系统下载地址,emui 5.0下载

    emui 5.0是华为官方基于Android 7.0而全新推出的手机系统.emui 5.0系统也将于华为旗下最新安卓智能手机"Mate 9"共同发布,该系统在旧系统上全新进行优化, ...

  4. Mokee android 10.0代码下载编译总结

    Mokee代码下载 mokee下载 mokee编译 过程问题 做android framework开发也有很多年了,一直都是在公司里面下载编译,最近因为自己有个小需求想要实现,因此想着自己下载一个ao ...

  5. android 6.0表情下载,谷歌Android 6.0.1推送 一大波新表情来了

    科客点评:不知道是不是我看多了iOS上的emoji,我觉得圆乎乎的表情更可爱. 12月8日,谷歌正式将最新的Android 6.0.1操作系统推送至智能手机Nexus 5.Nexus 5X.Nexus ...

  6. android 6.0 官方下载,安卓6.0官方正式版

    <安卓6.0官方正式版>是由国际上非常知名的系统提供商微软全力为安卓用户们打造的全新的系统,本系统在原有的基础上,更加的流畅,顺滑,体积小,不过在功能方面将会更加的实用和强大,不得不说非常 ...

  7. android 7.0 iso下载地址,iOS 7.0固件 全系列官方正式版下载地址

    苹果公布iOS7以来经过无数次的beta版本,经过漫长的等待iOS7正式版终于发布下载了,本更新带来了华丽的全新设计,同时还包含数百项新功能,包括控制中心.AirDrop.iTunes 广播以及对通知 ...

  8. Android studio系列:win10上Android studio4.0.2下载安装

    .exe文件到共同进步里面找.如果丢失了,到官网下载历史版本,网速很差,去下载集下载 Android studio 4.0.2版本,本身自带jdk(虽然文件名写的是jre),版本是1.8.0_221, ...

  9. android 9.0系统下载地址,安卓9.0发布(有下载地址)!你会去用吗?

    原标题:安卓9.0发布(有下载地址)!你会去用吗? 相信有关注科技界的小伙伴都知道5月8日谷歌的开发者大会在美国召开.意料之中,谷歌发布了其最新的Android P系统.而其中公布的可以首批体验到新系 ...

最新文章

  1. python免费入门手册-python基础入门手册。。。。。。
  2. C++中类的静态成员变量和静态成员函数
  3. nyist -- 组队赛(二)
  4. Jquery的ajax提交成功后刷新页面
  5. [html] 列举几种瀑布流布局的方法
  6. powerbi绘制地图_如何使用PowerBI绘制SQL Server 2017图形数据库
  7. java处理文本的方法
  8. WebService学习之三:spring+cxf整合
  9. 超赞,1万字的后端面试题及面试经验分享!
  10. 设计心理学1-日常的设计【读书笔记】
  11. m4a怎么转换mp3格式?
  12. 一个关于创业不错的博客
  13. golang中的dns问题
  14. Python微信防撤回,基于itchat模块
  15. CSS 样式书写顺序及规范
  16. Linux学习——废旧电脑再利用Ubuntu部署私有云Nextcloud
  17. html5无法绘制线条,Html5画布 - 使用fabric.js绘制完美线条或不使用
  18. 如何用python赚钱_一篇文章教你使用Python自动赚取支付宝积分,网友:发家致富?...
  19. Ubuntu安装Caffe .build_release/tools/caffe: error while loading shared libraries: libcudnn.so.5
  20. USB之Cyusb3014芯片原理之四控制传输实现原理(十二) 2022-04-01

热门文章

  1. SEED LABS初入
  2. btcpool之Stratum协议
  3. 导弹发射-河南省第九届省赛D题
  4. ug支持linux系统吗,UG12.02-linux,感兴趣的可以下载
  5. Win7系统便签怎样设置一个闹钟提醒
  6. 帝国CMS 批量修改信息标题方法
  7. 服务器修改客户端密码错误,服务端PAK密码错误解决方法
  8. 动态主机配置协议(DHCP)
  9. 贝萨尔曲线实现Periscope心形点赞动画效果
  10. c#发送邮件(带抄送,密送,群发,附件)