Android 8.0升级不跳转应用安装页面的解决方法

 更新时间:2018年06月13日 08:33:56   作者:zj_blog  
这篇文章主要为大家详细介绍了Android 8.0升级不跳转应用安装页面的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

最近开发遇到了个问题,app升级的时候,其他手机都能正常升级,下载完安装包,跳到安装页面进行新版本的安装。但却有用户反映,华为P10和华为Mate 9升级时,怎么也无法跳转到安装页面。起初我以为是华为手机自身系统的问题(因为手上的华为测试机都是正常的),还特地对比了几种配置的华为手机,最后发现,是Android 8.0系统版本的锅,不是手机的问题。

2017年8月22日,Google发布了Android 8.0的正式版,其正式名称为:Android Oreo(奥利奥),Android 8.0强化了权限管理,变得更加安全。在Android 8.0以前,所有的未知来源应用都可以被安装,或者会弹窗给用户一个提示,如此设计虽然方便,但是若被引诱安装了恶意软件,安装"未知来源"的应用有可能会对手机系统带来潜在的危害;

而在Android 8.0的系统中,**未知来源应用权限**的开关被移除掉了,取而代之的是未知来源应用的管理列表,如果你想要安装某个被自己所信任的开发者的app,则需要在每一次都手动授权"安装未知应用"的许可。设置页面如下图:(在华为Android 8.0中,打开该设置页面:设置列表—>安全与隐私—>更多安全设置—>安装未知应用)

*如图所示*,若某个应用选择的是“不允许”,那么假设app手动升级的时候,就无法成功跳转到安装页面进行正常的App升级流程了,此时需要手动去授权才行,但是很多用户并不知道需要这么设置。
废话说了一大堆,解决其实很简单。

1.在AndroidManifest.xml文件中,添加REQUEST_INSTALL_PACKAGES权限

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

2.在打开安装包的代码中添加**兼容Android 8.0**的代码。

/** 
  * 打开安装包 
  * 
  * @param mContext 
  * @param fileUri 
  */ 
  public void openAPKFile(Activity mContext, String fileUri) { 
    DataEmbeddingUtil.dataEmbeddingAPPUpdate(fileUri); 
    // 核心是下面几句代码 
    if (null != fileUri) { 
      try { 
        Intent intent = new Intent(Intent.ACTION_VIEW); 
        File apkFile = new File(fileUri); 
        //兼容7.0 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
          intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
          Uri contentUri = FileProvider.getUriForFile(mContext, mContext.getPackageName() + ".fileProvider", apkFile); 
          intent.setDataAndType(contentUri, "application/vnd.android.package-archive"); 
          //兼容8.0 
          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { 
            boolean hasInstallPermission = mContext.getPackageManager().canRequestPackageInstalls(); 
            if (!hasInstallPermission) { 
              ToastUtil.makeText(MyApplication.getContext(), MyApplication.getContext().getString(R.string.string_install_unknow_apk_note), false); 
              startInstallPermissionSettingActivity(); 
              return; 
            } 
          } 
        } else { 
          intent.setDataAndType(Uri.fromFile(apkFile), "application/vnd.android.package-archive"); 
          intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        } 
        if (mContext.getPackageManager().queryIntentActivities(intent, 0).size() > 0) { 
          mContext.startActivity(intent); 
        } 
      } catch (Throwable e) { 
        e.printStackTrace(); 
        DataEmbeddingUtil.dataEmbeddingAPPUpdate(e.toString()); 
        CommonUtils.makeEventToast(MyApplication.getContext(), MyApplication.getContext().getString(R.string.download_hint), false); 
      } 
    } 
  } 
 
 
  /** 
  * 跳转到设置-允许安装未知来源-页面 
  */ 
  @RequiresApi(api = Build.VERSION_CODES.O) 
  private void startInstallPermissionSettingActivity() { 
    //注意这个是8.0新API 
    Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    mContext.startActivity(intent); 
  } 

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

相关文章

  • 在Android应用中实现离线数据同步的步骤详解

    在Android应用中实现离线数据同步的步骤详解

    在构建 Android 应用时,离线数据同步是一个不可或缺的环节,无论是网络状况不佳,还是用户处于飞行模式,离线数据同步都能让用户在无网络的情况下继续使用应用,本文将详细介绍如何在 Android 应用中实现离线数据同步,需要的朋友可以参考下
    2024-08-08
  • Android开发框架之自定义ZXing二维码扫描界面并解决取景框拉伸问题

    Android开发框架之自定义ZXing二维码扫描界面并解决取景框拉伸问题

    这篇文章主要介绍了Android开发框架之自定义ZXing二维码扫描界面并解决取景框拉伸问题的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • Android 8.0系统中通知栏的适配详解

    Android 8.0系统中通知栏的适配详解

    本片文章给大家通过实例讲解分析了Android 8.0系统中通知栏的相关知识点,对此有需要的朋友可以参考学习下。
    2018-04-04
  • Android App开发中将View或Drawable转为Bitmap的方法

    Android App开发中将View或Drawable转为Bitmap的方法

    这篇文章主要介绍了Android App开发中将View或Drawable转为Bitmap的方法,其中View转换时作者特别提到了getDrawingCache=null问题的解决方法,需要的朋友可以参考下
    2016-03-03
  • Android仿Win8界面开发

    Android仿Win8界面开发

    这篇文章主要介绍了Android仿Win8界面开发的实例代码,将要模仿的Win8界面的一个个设计,分割成一个一个的方块,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • Android PowerManagerService 打开省电模式

    Android PowerManagerService 打开省电模式

    这篇文章主要介绍了Android PowerManagerService打开省电模式,文章通告省电模式的打开过程、什么是 battery saver sticky 模式两部分展开详情,感兴趣的朋友可以参考一下
    2022-08-08
  • Android中监听判断网络连接状态的方法

    Android中监听判断网络连接状态的方法

    这篇文章主要介绍了Android中监听判断网络连接状态的方法,介绍了是否有网络连接判断、连接的类型和监听网络状态的方法,需要的朋友可以参考下
    2014-06-06
  • 轻松实现Android锁屏功能

    轻松实现Android锁屏功能

    这篇文章主要帮助大家轻松实现Android锁屏功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Android判断某个权限是否开启的方法

    Android判断某个权限是否开启的方法

    今天小编就为大家分享一篇Android判断某个权限是否开启的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Android 服务端将位置信息发送给客户端的实现

    Android 服务端将位置信息发送给客户端的实现

    这篇文章主要介绍了Android 服务端将位置信息发送给客户端的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论