对于完全符合Android8.0未知源APP安装权限方案的用户,您的请求将提供源代码。 我自己写了demo。 可以在虚拟机上运行。 请检查源代码:
源代码传输2018年5月更正:
@this蜗牛需要设置包名称才能打开权限设置界面,以便onActivityResult接收【resultCode等于RESULT_OK】
所以修正方法:
@ requires API (API=build.version _ codes.o ) privatevoidstartinstallpermissionsettingactivity ) /注意这是8.0新应用程序服务器}如下所示。
@ requires API (API=build.version _ codes.o ) privatevoidstartinstallpermissionsettingactivity ) uripackageuri=urri //startactivityforresult(intent,10086; (@this感谢蜗牛的意见
在Android8.0的众多新功能中,有一个非常重要的功能。 未知源的应用权限
以前,在安装未知源的APP时,通常会弹出一个弹出窗口,让用户可以设置允许还是拒绝,然后在设置允许后,所有未知源的APP都可以安装。
Android8.0的变化需要取消未知APP安装权限的开关,相反,创建未知源APP的管理列表,诚实的洋葱打开每个APP的未知源安装权限。 谷歌之所以这样做,是为了防止最初体面的APP随后通过升级而做出不合法的事情,从而侵犯用户的权利。
crdny的APP直接符合Android8后,内部启动APP安装将被阻止。 如果不处理此未知源的权限,APP将无法更新,只能到APP市场重新下载。
那么,如何适应8.0这个新的变化呢?
1、在清单文件中添加请求安装权限
uses-permission Android : name=' Android.permission.request _ install _ packages '/2,必须在代码中处理权限
首先,使用canRequestPackageInstalls ()方法确定APP应用程序是否具有此权限
haveinstallpermission=getpackagemanager ().canRequestPackageInstalls ); 如果haveInstallPermission为true,则您的APP应用程序有权安装未知的源APP应用程序。 你直接执行安装APP应用程序的操作就可以了。
如果haveInstallPermission为false,则除非您的APP应用程序具有安装未知源APP应用程序的权限,否则无法安装APP应用程序。 此权限不是运行时权限,因此不能在代码中请求权限。 或者,用户必须跳转到设置屏幕并自己打开权限。
具体操作是弹出诊断程序以通知用户
“必须打开未知的源权限才能安装APP应用程序。 请在设定中打开权限”
然后,使用者按一下确定,跳至未知的来源APP应用程式权限管理清单。
intent intent=new intent (settings.action _ manage _ unknown _ app _ sources ); startactivityforresult(intent,10086; 然后去onActivityResult领取结果:
if (result code==result _ okrequestcode==10086 (安装过程); 再次运行安装过程(包括//权限确定)的完整过程包括://安装APP应用程序的private void installProcess () { boolean haveInstallPermission; if (build.version.SDK _ int=build.version _ codes.o ) /获取您是否有权安装未知的源APP应用程序。 haveinstallpermission=getpackagemanager () )。 if (! haveinstallpermission(//无权限dialogutils.showdialog ) this,'必须打开未知的源权限才能安装APP应用程序。 请在设置中打开权限',new view.onclick listener ((overridepublicvoidonclick ) viewv ) if ) build.version.SDK _ int=build }、null; 返回; }//具有权限并开始安装APP install apk (apk ) } @ requires API (API=build.version _ codes.o ) privatevoidstartinstalllpes 注意这是8.0新apiintentintent=new intent (settings.action _ manage _ unknown _ app _ sources,packageURI ); startactivityforresult(intent,10086; //privatevoidinstallapk (文件PK ) intentintent=newintent )安装intent.action_view。 if (build.version.SDK _ int build.version _ codes.n (intent.setdataandtype (uri.from file (apk ),' appplicanicand ) }要在} else {//Android7.0之后获取uri,请使用contentprovideruriuri=appcommonutils.geturifromfile (getbasecontext ),apk ); intent.setdataandtype(uri,' application/vnd.Android.package-archive '; intent.add flags (intent.flag _ grant _ read _ uri _ permission ); } intent.add flags (intent.flag _ activity _ new _ task ); getBaseContext () .开始活动(intent ); 至此,Android8.0未知源APP的安装权限已基本完成。 希望对大家有帮助。 请注明出处