Knox/Intune管理企业设备的IMEI程序化获取方案咨询
企业自有设备(Knox/Intune管理)获取IMEI的可行方案
一、三星Knox管理设备的专属方案
Knox SDK提供了企业级设备信息获取能力,不受普通Android权限限制:
- 集成Knox SDK(推荐4.0及以上版本),在项目中引入对应依赖
- 在Knox Manage控制台中,为应用配置Knox权限:启用
com.samsung.android.knox.permission.KNOX_DEVICE_ADMIN和com.samsung.android.knox.permission.READ_DEVICE_INFO - 代码实现示例:
import com.samsung.android.knox.KnoxEnterpriseDeviceManager; import com.samsung.android.knox.device.DeviceInfo; // 初始化Knox管理器 KnoxEnterpriseDeviceManager kedm = KnoxEnterpriseDeviceManager.getInstance(context); if (kedm != null && kedm.isKnoxEnabled()) { DeviceInfo deviceInfo = kedm.getDeviceInfo(); String imei = deviceInfo.getImei(); // 后续业务逻辑处理 }
二、Intune管理设备的权限配置与代码实现
Intune管理的企业设备,可通过MDM策略直接授予READ_PRIVILEGED_PHONE_STATE权限,步骤如下:
- 登录Intune控制台,找到目标应用进入应用权限配置页面
- 添加Android权限:选择
READ_PRIVILEGED_PHONE_STATE并设置为「允许」,保存策略后等待设备同步 - 权限生效后,通过原生TelephonyManager获取IMEI:
import android.content.Context; import android.telephony.TelephonyManager; import android.os.Build; public String getDeviceIMEI(Context context) { TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); String imei = null; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { imei = tm.getImei(); } else { imei = tm.getDeviceId(); } return imei; }
注意:必须将应用标记为「企业自有应用」,公共应用无法申请此类特权权限。
三、核心注意事项
- 仅企业自有且完成MDM注册的设备可获取IMEI,个人设备无权限支持
- 禁止通过反射或其他绕过权限的方式获取IMEI,会违反Android安全规范且会被MDM拦截
- 同时适配两种管理环境时,可先检测设备是否启用Knox,再选择对应获取逻辑
内容的提问来源于stack exchange,提问作者jcss
相关产品推荐
相关产品推荐

