gpt4 book ai didi

android - 为什么 sendTextMessage 需要 READ_PHONE_STATE 权限?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:05 26 4
gpt4 key购买 nike

我的应用程序将此堆栈跟踪发送回家,这似乎在幕后发生了一些非常错误的事情。

phone_model=SKY IM-A630K, android_version=2.1-update1

java.lang.SecurityException: Requires READ_PHONE_STATE: Neither user 10089 nor current process has android.permission.READ_PHONE_STATE.

at android.os.Parcel.readException(Parcel.java:1218)
at android.os.Parcel.readException(Parcel.java:1206)
at com.android.internal.telephony.IPhoneSubInfo$Stub$Proxy.getLine1Number(IPhoneSubInfo.java:223)
at android.telephony.TelephonyManager.getLine1Number(TelephonyManager.java:764)
at android.telephony.SmsManager.sendTextMessage(SmsManager.java:129)
at android.telephony.SmsManager.sendTextMessage(SmsManager.java:108)
at com.emergency.button.SMSSender.safeSendSMS(SMSSender.java:91)
at com.emergency.button.EmergencyActivity$EmergencyThread.sendSMS(EmergencyActivity.java:294)
at com.emergency.button.EmergencyActivity$EmergencyThread.sendMessages(EmergencyActivity.java:386)
at com.emergency.button.EmergencyActivity$EmergencyThread.run(EmergencyActivity.java:266)

那么我是否应该捕获所有与 sendTextMessage 相关的异常?这是谁的错?

最佳答案

我现在在 Lollipop (API 21) 中看到,即使使用像 SmsManager.getDefault().divideMessage(String) 这样的良性函数,也需要 READ_PHONE_STATE 权限。我确信之前不需要它,这是一个操作系统问题,因为我在升级到 Lollipop 之前和之后在 Nexus 5 设备上测试过它。之前,在运行 KitKat 时,SMS 在没有 READ_PHONE_STATE 权限的情况下也能正常工作。之后,它是必需的。

原因是,我猜,电话功能试图就一切做出明智的决定。因此,像拆分 SMS(甚至不发送它)这样的简单任务会一直运行到 SmsManager 以查询手机状态。

我认为这是一个设计错误。正如您上面所说,它可以而且应该吓到用户。为什么他们在 Android 上有这么多模棱两可的权限?

这是我的堆栈跟踪,只是为了好玩:

java.lang.SecurityException: Requires READ_PHONE_STATE: Neither user 10078 nor current process has android.permission.READ_PHONE_STATE.
at android.os.Parcel.readException(Parcel.java:1540)
at android.os.Parcel.readException(Parcel.java:1493)
at com.android.internal.telephony.IPhoneSubInfo$Stub$Proxy.getGroupIdLevel1(IPhoneSubInfo.java:465)
at android.telephony.TelephonyManager.getGroupIdLevel1(TelephonyManager.java:1666)
at android.telephony.SmsMessage.hasEmsSupport(SmsMessage.java:776)
at com.android.internal.telephony.gsm.SmsMessage.calculateLength(SmsMessage.java:808)
at android.telephony.SmsMessage.fragmentText(SmsMessage.java:322)
at android.telephony.SmsManager.divideMessage(SmsManager.java:328)
at mobi.chatfish.utils.CFCommunications.sendSMSDirect(CFCommunications.java:138)

关于android - 为什么 sendTextMessage 需要 READ_PHONE_STATE 权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4599438/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com