当前位置: 首页 > news >正文

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

http://www.xdnf.cn/news/614611.html

相关文章:

  • 字符串和常量池的进一步研究
  • Android中Binder驱动作用?
  • 影刀RPA:开启办公自动化的高效之旅
  • Vue:axios(POST请求)
  • 【JavaScript 实现导航栏顶部吸附效果】
  • 8天Python从入门到精通【itheima】-35~37
  • 养成一个逐渐成长的强化学习ai
  • AI练习:折叠效果
  • magentic-ui和browser-use深度分析
  • 统一错误处理脚本实现
  • 数据赋能(234)——数据管理——标准化原则
  • CST软件基础六:视图
  • java中string类型的list集合放到redis的5种数据类型的那种比较合适呢,可以用StringRedisTemplate实现
  • 佰力博与您探讨PVDF薄膜极化特性及其影响因素
  • 巴西电商爆发期,第三方海外仓如何应用WMS系统抢占市场先机?
  • dubbo使用nacos作为注册中心配置
  • Python语法特点与编码规范
  • DAY 34 GPU训练及类的call方法
  • 设计模式——简单工厂模式
  • Zabbix实践!客户端自动发现
  • c++ constexpr关键字
  • VSCode如何像Pycharm一样“““回车快速生成函数注释文档?如何设置文档的样式?autoDocstring如何设置自定义模板?
  • RNN GRU LSTM 模型理解
  • 深度“求索”:DeepSeek+Dify构建个人知识库
  • SkyWalking高频采集泄漏线程导致CPU满载排查思路
  • RV1126 音频AI模块的详解
  • 树莓派4B搭建Hector SLAM算法, ROS1 ROS2?
  • 淘宝卖家评价等级如何区分?如何提升信誉等级?
  • 数据结构 -- 插入排序(直接插入排序和希尔排序)
  • 告别手抖困扰:全方位健康护理指南