最近工作中,遇到很多问题,关于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();
}版权声明:本文为qq_25336875原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。