在 Android 开发中判断用户是否开启了“允许安装未知来源应用(Install Unknown Apps)”权限
在 Android 开发中判断用户是否开启了“”权限,如果没有开启,就引导用户前往设置页面开启。
·
在 Android 开发中判断用户是否开启了“允许安装未知来源应用(Install Unknown Apps)”权限,如果没有开启,就引导用户前往设置页面开启。
✅ 支持 Android 8.0(API 26)及以上
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import android.widget.Toast;
import androidx.annotation.RequiresApi;
public class InstallPermissionUtil {
/**
* 检查并请求“安装未知来源应用”权限
* @param activity 当前的 Activity,用于启动设置页面
* @param requestCode 用于 onActivityResult 的回调识别
*/
public static void checkInstallPermission(Activity activity, int requestCode) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Android 8.0 及以上系统
if (!activity.getPackageManager().canRequestPackageInstalls()) {
// 没有权限,引导用户去设置中开启
Toast.makeText(activity, "请允许安装来自未知来源的应用", Toast.LENGTH_LONG).show();
// 构建跳转到设置页面的 Intent
Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES);
Uri packageURI = Uri.parse("package:" + activity.getPackageName());
intent.setData(packageURI);
activity.startActivityForResult(intent, requestCode);
} else {
// 已经有权限
Toast.makeText(activity, "已获得安装权限", Toast.LENGTH_SHORT).show();
}
} else {
// Android 8.0 以下,不需要这个权限
Toast.makeText(activity, "系统版本低于8.0,不需要手动开启权限", Toast.LENGTH_SHORT).show();
}
}
/**
* 在 Activity 的 onActivityResult 中调用此方法判断权限是否已开启
*/
public static boolean isInstallPermissionGranted(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
return context.getPackageManager().canRequestPackageInstalls();
}
return true; // Android 8.0 以下默认允许
}
}
✅ 使用方式(在 Activity 中):
private static final int REQUEST_INSTALL_PERMISSION = 1001;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 检查权限
InstallPermissionUtil.checkInstallPermission(this, REQUEST_INSTALL_PERMISSION);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_INSTALL_PERMISSION) {
if (InstallPermissionUtil.isInstallPermissionGranted(this)) {
Toast.makeText(this, "用户已授权安装未知来源应用", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "用户未授权安装未知来源应用", Toast.LENGTH_SHORT).show();
}
}
}
📌 权限说明(无需在 AndroidManifest.xml 中声明额外权限):
Android 8.0 之后安装未知来源应用是 “逐应用设置”,因此不再需要添加 <uses-permission> 来请求权限,而是引导用户打开对应设置页面。
更多推荐



所有评论(0)