【问题标题】:Can't get IMEI as device owner on Android 10无法在 Android 10 上将 IMEI 作为设备所有者
【发布时间】:2020-03-22 17:11:10
【问题描述】:

对于特殊的自助服务终端设置,我需要设备的 IMEI。自 Android 10 起,常规应用无法访问 IMEI 等设备标识符。但是documentation 建议:

此 API 需要以下条件之一:

  • 如果调用者是设备或配置文件所有者,则调用者拥有 Manifest.permission#READ_PHONE_STATE 权限。
  • ...

我已使用以下命令将应用设置为设备所有者:

adb shell dpm set-device-owner com.xxxx.xxxx/.AdminReceiver

我的清单包含:

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

使用以下代码行访问 IMEI:

TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);

try
{
    return telephonyManager.getImei();
}
catch (SecurityException e)
{
    return null;
}

我仍然收到 SecurityExceptions(带有消息:The user does not meet the requirements to access device identifiers.)。我做错了什么?

【问题讨论】:

  • 我认为READ_PHONE_STATEdangerous permission that needs to be requested at runtime。除此之外,您可能会考虑记录异常并检查其消息以获取更多详细信息。
  • 我在 Android 10 上遇到了完全相同的问题。感谢 ADB,我的应用程序被设置为设备所有者,并且在运行时请求了良好的权限,就像您编写 @CommonsWare 时一样。我检查了设置应用程序。但我仍然有相同的SecurityException。自 2020 年 7 月以来,此解决方案是否明确被阻止,如以下答案中提到的 vmayorow ?如果您有IMEI的想法,请提供帮助。谢谢
  • @odgatelmand:文档没有改变,所以我的假设是 dan 使用的配方应该有效。但是,我个人并没有尝试过以这种方式访问​​ IMEI——我的回答是基于 dan 根据我的原始评论所做的工作。
  • 感谢您的快速回复。我刚刚在其他装有 Android 10 的设备上尝试过,似乎在某些版本的 Android 10 上,没有返回 IMEI,正如@vmayorow 下面提到的那样
  • 作为设备所有者应用程序,您可以通过编程方式授予危险权限:setPermissionGrantState。此外,我同意即使您已正确完成所有操作,某些设备仍然不提供 imei。

标签: android


【解决方案1】:

READ_PHONE_STATEdangerous 权限。对于 Android 6.0+,您需要 request it at runtime 除了拥有它的清单。或者——特别是对于一次性应用安装——您可以进入系统设置应用并手动授予权限。

【讨论】:

    【解决方案2】:

    据我所知,Android 10 仅限制 IMEI 访问系统应用程序(但您可以尝试使用设备所有者权限)。要获取IMEI,应用需要声明以下权限:

    <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
    

    详情见:https://developer.android.com/about/versions/10/privacy/changes

    解决方法是将您的应用定位到 Android 9(API 级别 28)或更低版本

    您可以获取设备所有者应用程序here 的示例(这是我的开源 MDM 项目)。在该示例中,应用使用这种方式在 Android 10 上检索 IMEI,并仅声明 android.permission.READ_PHONE_state

    更新 - 2020 年 7 月:在 Android 10 的某些版本(例如三星 Galaxy A01)上,即使应用针对 API 级别 28,现在也不会返回 IMEI。

    【讨论】:

      猜你喜欢
      • 2017-05-01
      • 2019-03-21
      • 2022-11-09
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      相关资源
      最近更新 更多