在 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> 来请求权限,而是引导用户打开对应设置页面。

Logo

电影级数字人,免显卡端渲染SDK,十行代码即可调用,工业级demo免费开源下载!

更多推荐