Android8.0未知来源应用安装权限
Android8.0的诸多新特性中有一个非常重要的特性:未知来源应用权限(危险权限)
android6.0到android8.0之前安装未知来源应用的时候一般会弹出一个弹窗让用户去设置允许还是拒绝,并且设置为允许之后,所有的未知来源的应用都可以被安装。
Android8.0的变化是,未知应用安装权限的开关被除掉,取而代之的是未知来源应用的管理列表,需要在里面打开每个应用的未知来源的安装权限。Google这么做是为了防止一开始正经的应用后来开始通过升级来做一些不合法的事情,侵犯用户权益。
当你的应用直接适配到Android8之后,内部启动应用安装是会被阻塞的,如果不处理好这个未知来源的权限,会导致应用根本无法更新,只能去应用市场重新下载
Activity类下getPackageManager().canRequestPackageInstalls();获取是否有未知来源应用安装权限
源码如下
AndroidManifest文件中配置
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
//权限检查
private void CheckUnknowInstallPermssion(){
boolean haveInstallPermission;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
{
//获取是否有安装未知应用程序权限
haveInstallPermission = getActivity().getPackageManager().canRequestPackageInstalls();
if(!haveInstallPermission)
{ //无权限,开启未知应用安装程序权限
toInstallPermissionSettingIntent();
};
}
}
}
//开启安装未知来源权限
@RequiresApi(api = Build.VERSION_CODES.O)
private void toInstallPermissionSettingIntent() {
Uri packageURI = Uri.parse("package:"+getActivity().getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,packageURI);
//系统将打开是未知来源应用的管理列表,需要用户手动设置未知来源应用安装权限
startActivityForResult(intent, 1);
}
//权限开启后的回调函数
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == 1) {
//权限开启成功,编写用户服务函数
// Toast.makeText(getActivity(),"ShadeScan安装权限已打开",Toast.LENGTH_SHORT).show();
}
}
```