android8.0以上更新apk未弹出安装界面的解决办法

     在更新apk时之前写的代码是适配android7.0的版本,android8.0,android9.0下载成功后,屏幕闪了一下,没有跳转到系统安装界面,随后查阅资料知android8.0添加了新的安全措施,不允许应用内安装未经过Google play验证的应用,所以我们又得针对8.0,9.0系统做适配.

第一步在xml文件里面写上权限

  • 在清单文件中添加如下权限:
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/> 

发现并没有什么用,原来是没有打开安装未知应用的权限

判断是否已经获取到允许安装未知应用 

在8.0中的PackageManager类中多了 canRequestPackageInstalls() 这个方法来检查是否已经获取到允许安装未知应用。

if (Build.VERSION.SDK_INT>=26){
    boolean hasInstallPermission = isHasInstallPermissionWithO(mContext);
    if (!hasInstallPermission) {
        startInstallPermissionSettingActivity(mContext);
        return;
    }

}

@RequiresApi(api = Build.VERSION_CODES.O)
private boolean isHasInstallPermissionWithO(Context context){
    if (context == null){
        return false;
    }
    return context.getPackageManager().canRequestPackageInstalls();
}

startInstallPermissionSettingActivity方法是:开启设置安装未知来源应用权限界面,最好是写上apk的包名,直接跳转到当前apk权限界面

/**
 * 开启设置安装未知来源应用权限界面
 * @param context
 */
@RequiresApi(api = Build.VERSION_CODES.O)
private void startInstallPermissionSettingActivity(Context context) {
    if (context == null) {
        return;
    }
    Intent intent = new Intent();
    //获取当前apk包URI,并设置到intent中(这一步设置,可让“未知应用权限设置界面”只显示当前应用的设置项)
    Uri packageURI = Uri.parse("package:" + context.getPackageName());
    intent.setData(packageURI);
    //设置不同版本跳转未知应用的动作
    if (Build.VERSION.SDK_INT >= 26) {
        //intent = new Intent(android.provider.Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,packageURI);
        intent.setAction(android.provider.Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
    } else {
        intent.setAction(android.provider.Settings.ACTION_SECURITY_SETTINGS);
    }
    ((Activity) context).startActivity(intent);
    Toast.makeText(mContext, "请打开未知应用安装权限", Toast.LENGTH_SHORT).show();
}

这样以来8.0以上的手机就适配成功啦~

猜你喜欢

转载自blog.csdn.net/qq_22576071/article/details/97010225