【问题标题】:How to get the phone number of an android phone via adb?如何通过 adb 获取安卓手机的电话号码?
【发布时间】:2013-10-05 17:43:33
【问题描述】:

有没有办法通过 adb 获取手机的电话号码?

我认为 dumpsys 是一个可能的答案,但似乎没有任何系统服务跟踪手机自己的号码。

【问题讨论】:

    标签: android adb


    【解决方案1】:

    iphonesubinfo 服务“跟踪”包括电话号码在内的订户信息。不幸的是,iphonesubinfo 服务没有实现 dump() 方法,所以 dumpsys 什么也没显示。您将不得不使用service call 命令来调用IPhoneSubInfo.getLine1Number()IPhoneSubInfo.getMsisdn()

    根据 android 版本和您的运营商,以下一两个命令会告诉您电话号码(service call 命令需要 root 权限):

    service call iphonesubinfo 4
    service call iphonesubinfo 5
    service call iphonesubinfo 6
    service call iphonesubinfo 7
    service call iphonesubinfo 8
    

    如果您想为您的特定设备找出正确的代码 - 从 Calling Android services from ADB shell 帖子下载脚本并像这样运行它:

    ./get_android_service_call_numbers.sh iphonesubinfo | grep getLine1Number
    

    更新

    Android 5.0 的交易代码:

    service call iphonesubinfo 11 # getLine1Number()
    service call iphonesubinfo 15 # getMsisdn()
    

    Android 5.1 的交易代码:

    service call iphonesubinfo 13 # getLine1Number()
    service call iphonesubinfo 17 # getMsisdn()
    

    【讨论】:

    • 太棒了。这适用于我的设备。不幸的是,结果很丑陋,需要一些繁重的解析,但它确实有效!
    • 不root手机似乎无法工作。在所有情况下,我都会收到一条错误消息。
    • 不管怎样,在当前的 API (19) 中,iphonesubinfo 确实实现了 dump() 方法。但是,它只报告电话类型(例如 GSM)和设备 ID(例如 IMEI),而不是电话号码。如果您对其中之一感兴趣,会有所帮助,否则,请继续使用上述内容。
    • 另外,上面的代码对应如下iphonesubinfo服务事务:4 = getGroupIdLevel1, 5 = getIccSerialNumber, 6 = getLine1Number, 7 = getLine1AlphaTag, 8 = getMsisdn.
    • 我在三星 S4(无根)上运行了这个。输出(当然经过大量解析)如下所示:iRequires READ_PHONE_STATE: N either user 2000 nor current process has android permissionREAD_PHONE_STATE。我打开了 USB 调试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 1970-01-01
    • 2011-10-15
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多