版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z_x_Qiang/article/details/81114900
未知来源应用权限
Android8.0的诸多新特性中有一个非常重要的特性:未知来源应用权限
以前安装未知来源应用的时候一般会弹出一个弹窗让用户去设置允许还是拒绝,并且设置为允许之后,所有的未知来源的应用都可以被安装。
Android8.0的变化是,未知应用安装权限的开关被除掉,取而代之的是未知来源应用的管理列表,需要在里面打开每个应用的未知来源的安装权限。Google这么做是为了防止一开始正经的应用后来开始通过升级来做一些不合法的事情,侵犯用户权益。
当你的应用直接适配到Android8之后,内部启动应用安装是会被阻塞的,如果不处理好这个未知来源的权限,会导致应用根本无法更新,只能去应用市场重新下载。
适配android 8.0:
1.需要在manifast.xml中ti添加一个权限:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
2.由于这个quan权限不是运行权限,所以不能通过请求权限获取权限;要通过下面一行代码获取是否有权限,返回一个boolean类型,true有权限,falsewuqu无权限;
getPackageManager().canRequestPackageInstalls();
3.跳到设置页面进行设置,通过startActivityForResult的方法,返回设置结果;
public void checkPermission(){
boolean haveInstallPermission;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
haveInstallPermission = getPackageManager().canRequestPackageInstalls();
if(!haveInstallPermission){
//没有权限让调到设置页面进行开启权限;
Uri packageURI = Uri.parse("package:" + getPackageName());
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES, packageURI);
startActivityForResult(intent, 10086);
}else{
//有权限,执行自己的逻辑;
}
}else{
//其他android版本,可以直接执行安装逻辑;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == 10086) {
//返回权限后,执行自己的逻辑;
}
}