栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

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

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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权限

 

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

 
  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); 
  } 

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/156030.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号