在 Android 开发中判断用户是否开启了“允许安装未知来源应用(Install Unknown Apps)”权限
在 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();// 构建跳转到设置页面的 IntentIntent 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>
来请求权限,而是引导用户打开对应设置页面。