Android8.0,允许安装未知来源

最近工作中,遇到很多问题,关于android8.0+的问题尤其多。一直想记录下来,却没有实行。这是我的第一篇文章。首先感谢各位前辈,帮我解决了很多问题,感谢。这篇文章记录关于android8.0允许安装未知来源。

关于允许安装未知来源的代码很多,后边也会贴出,这里要强调一个问题,就是注意你的 targetSdkVersion一定要大于等于26,血的教训,因为之前有将targetSdkVersion设置为25,结果下边的haveInstallPermission始终是false,哭死啊,折腾了我一上午,明明已经允许了安装未知来源,可是下边的haveInstallPermission始终是false。后来修改了 targetSdkVersion为27,一切恢复正常。

//先判断是否有安装未知来源应用的权限
boolean haveInstallPermission = getPackageManager().canRequestPackageInstalls();

下边是完成允许打开位置来源的代码。

/**
 * 对于android8.0,判断是否允许安装第三方软件。如果允许或者sdk版本小于26返回true,否则引导用户去打开允许位置来源安装
 */
private boolean bAllowunKnownSources() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        boolean haveInstallPermission;
        //先判断是否有安装未知来源应用的权限
        haveInstallPermission = getPackageManager().canRequestPackageInstalls();

        if (!haveInstallPermission) {
            LogTool.i("WebViewActivity.bAllowunKnownSources", "打开允许第三方软件");
            //弹框提示用户手动打开
            showAlert(this, "安装权限", "需要打开允许来自此来源,否则影响软件自动更新,请去设置中开启此权限", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                        //此方法需要API>=26才能使用
                        toInstallPermissionSettingIntent();
                    }
                }
            });

        }
        return haveInstallPermission;
    } else {
        return true;
    }

}
/**
 * 开启安装未知来源权限
 * 可用于安装第三方软件包括自动更新安装
 */
@RequiresApi(api = Build.VERSION_CODES.O)
private void toInstallPermissionSettingIntent() {
    LogTool.i("requestRuntimePermission.onGranted" , 3+"" );
    Uri packageURI = Uri.parse("package:"+getPackageName());
    Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES , packageURI);
    try {
        startActivityForResult(intent, ALLOW_UNKNOWN_SOURCES);
    } catch (Exception e) {
        // TODO: handle exception
        e.printStackTrace();
    }

}
/**
 * alert 消息提示框显示
 * @param context   上下文
 * @param title     标题
 * @param message   消息
 * @param listener  监听器
 */
public static void showAlert(Context context, String title, String message, DialogInterface.OnClickListener listener){
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle(title);
    builder.setMessage(message);
    builder.setPositiveButton("确定", listener);
    builder.setCancelable(false);
    try {
        builder.setIcon(R.drawable.pic_small_warning);
    }catch (Exception e){
        e.printStackTrace();
    }
    AlertDialog dialog = builder.create();
    dialog.show();
}

你可能感兴趣的:(Android8.0+新特性)