You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取设备IMEI/序列号遇权限不足问题,已加Manifest权限仍无效求助

解决内部应用获取IMEI/序列号权限不足的问题

核心限制说明

从Android 10(API 29)开始,普通应用无法获取IMEI、序列号等设备标识符,只有具备**设备所有者(Device Owner)或配置文件所有者(Profile Owner)**身份的应用才能获取这些信息——这是系统层面的强制限制,仅靠Manifest权限声明无法绕过。

具体排查与解决步骤

  • 确认TestDPC的正确配置
    你只是安装了TestDPC,但还需要将你的应用设为设备/配置文件所有者:

    1. 连接设备到电脑,执行ADB命令:
      # 设置为设备所有者
      adb shell dpm set-device-owner com.your.package/.YourDeviceAdminReceiver
      # 或设置为工作配置文件所有者(适合企业场景)
      adb shell dpm set-profile-owner com.your.package/.YourDeviceAdminReceiver <user-id>
      
    2. 确保你的应用已经注册了DeviceAdminReceiver组件,并在Manifest中完成相关声明。
  • 检查Manifest权限的完整性
    除了READ_PHONE_STATE,还需要声明设备管理员权限:

    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.BIND_DEVICE_ADMIN" />
    
    <receiver
        android:name=".YourDeviceAdminReceiver"
        android:permission="android.permission.BIND_DEVICE_ADMIN">
        <meta-data
            android:name="android.app.device_admin"
            android:resource="@xml/device_admin_receiver" />
        <intent-filter>
            <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
        </intent-filter>
    </receiver>
    

    同时在res/xml目录下创建device_admin_receiver.xml,声明设备管理员权限范围:

    <device-admin xmlns:android="http://schemas.android.com/apk/res/android">
        <uses-policies>
            <limit-password />
            <watch-login />
            <!-- 根据需求添加其他MDM相关策略 -->
        </uses-policies>
    </device-admin>
    
  • 验证包的调用逻辑
    使用device_info_plus或device_imei时,需在获取IMEI前先检查应用是否具备所有者身份,否则会触发权限错误。例如在Flutter中:

    // 检查是否为设备所有者(需借助device_policy_manager相关API)
    bool isDeviceOwner = await DevicePolicyManager.isDeviceOwnerApp('com.your.package');
    if (isDeviceOwner) {
        String? imei = await DeviceInfoPlugin().androidInfo.id;
        // 处理IMEI
    } else {
        // 无权限,提示或使用替代方案
    }
    
  • 替代方案(若无法获取所有者身份)
    如果你的应用无法成为设备/配置文件所有者,可考虑:

    • 通过MDM后台直接推送设备的IMEI/序列号到应用(MDM本身可以获取这些信息)
    • 使用Android ID或OAID作为替代标识(注意:Android ID会在恢复出厂设置后改变,OAID由厂商提供,稳定性因设备而异)

内容的提问来源于stack exchange,提问作者Jordan McKoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 11:07:36