Android 8.0版本更新无法自动安装问题的解决方法

前言

前几天APP上线了个新版本,有部分用户反应在下载完安装包以后点击安装无反应。查了下这部分用户手机的系统的版本都是8.0+版本。因为太久没关注新版本特性,所以导致了这个问题的发生。

Android 8.0 (Android O)为了针对一些流氓软件引导用户安装其他无关应用。在应用权限设置的“特殊访问权限”中,加入了“安装其他应用”的设置。

实现

1.清单文件权限声明

<uses-permissionandroid:name="android.permission.REQUEST_INSTALL_PACKAGES"/>

2.点击安装判断是否有权限

 if (Build.VERSION.SDK_INT >= 26) {
    //来判断应用是否有权限安装apk
    boolean installAllowed= getPackageManager().canRequestPackageInstalls();
    //有权限
    if (installAllowed) {
      //安装apk
      install(apkPath);
    } else {
      //无权限 申请权限
      ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.REQUEST_INSTALL_PACKAGES}, INSTALL_APK_REQUESTCODE);
    }
  } else {
    install(apkPath);
} 

权限申请回调

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  switch (requestCode) {
    case INSTALL_APK_REQUESTCODE:
      //有注册权限且用户允许安装
      if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        install(apkPath);
      } else {
        //将用户引导至安装未知应用界面。
        Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
        startActivityForResult(intent, GET_UNKNOWN_APP_SOURCES);
      }
      break; 

  }
} 

安装APK

private void install(String apkPath) {
    //7.0以上通过FileProvider
    if (Environment.SYSTEM_VERSION_CODE >= 24) {
      Uri uri = FileProvider.getUriForFile(context, Environment.FILE_PROVIDER_AUTHORITY, new File(apkPath));
      Intent intent = new Intent(Intent.ACTION_VIEW).setDataAndType(uri, "application/vnd.android.package-archive");
      intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
      context.startActivity(intent);
    } else {
      Intent intent = new Intent(Intent.ACTION_VIEW);
      intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
      intent.setDataAndType(Uri.parse("file://" + apkPath), "application/vnd.android.package-archive");
      context.startActivity(intent);
    }
}

更新图示

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android studio 3.0安装配置方法图文教程

    本文为大家分享了Android studio安装与配置,具体内容如下 1.首先下载Android studio安装包,可以从http://www.android-studio.org/,下载最新版本,这里采用3.0版本进行演示,对应安装包为android-studio-ide-171.4408382-windows.exe,安装包大小681 MB,安装包不带SDK 2.下载好该安装包之后,点击进行安装,依次出现以下界面 在这里自己选择程序安装路径 这里Android studio程序安装完毕,但

  • Android开发环境安装和配置图文教程

    一.安装JDK.SDK.NDK 无论是用C#和VS2015开发Androd App还是用Java和Eclipse开发Androd App,都需要先安装JDK和Android SDK.把这些安装完毕后,再在开发工具中配置一下安装的路径就行了. 1.安装jdk 下面两个都要安装: jdk-6u45-windows-i586.exe jdk-7u79-windows-i586.exe 到网上找到对应的文件后下载运行即可,Oracle的官网上有,免费下载. 2.安装Android SDK 下载下面的An

  • 图解Windows环境下Android Studio安装和使用教程

    鉴于谷歌最新推出的Android Studio备受开发者的推崇,所以也跟着体验一下. 一.介绍Android Studio  Android Studio 是一个Android开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工具用于开发和调试. 最近,Google 已宣布,为了简化 Android 的开发力度,以重点建设 Android Studio 工具,到今年年底将停止支持Eclipse等其他集成开发环

  • 适配Android 8.0版本更新安装与通知栏的一些坑

    前言 Android 8.0系统更新之后,app的更新将不再像之前的系统版本一样能够直接下载安装包之后直接安装(以前安装未知来源应用的时候一般会弹出一个弹窗让用户去设置允许还是拒绝,并且设置为允许之后,所有的未知来源的应用都可以被安装),8.0需要用户给予允许app安装未知来源应用的权限(比如你的app 名字为A,当你需要更新时,则需要使用app的用户 授权A这个app 允许安装未知来源的权限,才能完成正常的更新操作). Android8.0的变化是,未知应用安装权限的开关被除掉,取而代之的是未

  • Android版本更新实例详解

    Android版本更新实例详解 1.导入xutils的jar包 2.在AndroidManifest.xml中添加权限 3.选择下载的路径,和下载apk文件的网址 private String url="http://www.oschina.NET/uploads/osc-Android-v2.6.4-release.apk"; private String sdPath = "/sdcard/" + System.currentTimeMillis() + &qu

  • 非常实用的小功能 Android应用版本的更新实例

    每一个应用都是具备一个功能,那就是版本更新,我记得我之前在面试的时候,面试官让我介绍一下应用版本更新的一些具体操作.我当时因为做过这个功能,所以回答的还是很流畅,现在我把这个分享给大家,需要能够共同进步. 我当时是这么说的: 首先呢,我们是应该在用户登录后,在首页执行检查版本信息的操作,具体是,获取到本地的版本号后,提交给服务器进行判断,然后后台来告诉我们当前版本是否为最新版本,紧接着我们拿到下载地址,执行下载的操作,具体的可以使用输入输出流来对文件进行存储和读取,为了方便下载,我们还可以使用一

  • Android程序版本更新之通知栏更新下载安装

    Android应用检查版本更新后,在通知栏下载,更新下载进度,下载完成自动安装,效果图如下: •检查当前版本号 AndroidManifest文件中的versionCode用来标识版本,在服务器放一个新版本的apk,versioncode大于当前版本,下面代码用来获取versioncode的值 PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); int

  • 安卓(Android)应用版本更新方法

    开发中对版本进行检查并更新的需求基本是所有应用必须有的功能,可是在实际开发中有些朋友就容易忽略一些细节. 版本更新的基本流程: 一般是将本地版本告诉服务器,服务器经过相关处理会返回客户端相关信息,告诉客户端需不需要更新,如果需要更新是强制更新还是非强制更新.客户端得到服务器返回的相关信息后再进一步做逻辑处理. 强制更新: 一般的处理就是进入应用就弹窗通知用户有版本更新,弹窗可以没有取消按钮并不能取消.这样用户就只能选择更新或者关闭应用了,当然也可以添加取消按钮,但是如果用户选择取消则直接退出应用

  • android 版本检测 Android程序的版本检测与更新实现介绍

    做个网站的安卓客户端,用户安装到自己手机上,如果我出了新版本怎么办呢?要有版本更新功能. 本来版本检测最好可以自动进行.但如果每次开启程序,都要先检测一轮,是一种浪费,毕竟版本更新是小概率的事情.或许可以程序开启的时候,判断一下时间,单日就检测,双日就不检测,或者随机什么的,降低一下检测的频率? 我采取的做法是将检测功能做到了菜单上,用户有需要,就手动打开自己检测一下.反正我们这个是网站客户端,有版本更新,在网站上发个通告就行了. 版本检测与更新有以下几个关键步骤: 1.检测有无新版本 2.下载

  • android中DownloadManager实现版本更新,监听下载进度实例

    DownloadManager简介 DownloadManager是Android 2.3(API level 9)用系统服务(Service)的方式提供了DownloadManager来处理长时间的下载操作.它包含两个静态内部类DownloadManager.Query(用来查询下载信息)和DownloadManager.Request(用来请求一个下载). DownloadManager主要提供了下面几个方法: public long enqueue(Request request)把任务加

随机推荐