ube*_*kel 10 permissions sms android
我的应用程序将这个堆栈跟踪发回家,看起来好像发生了什么非常错误.
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)
Run Code Online (Sandbox Code Playgroud)
那么我应该捕获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)
Run Code Online (Sandbox Code Playgroud)
我的应用程序向家里发送了这个堆栈跟踪,这似乎是在幕后发生了一些非常错误的事情。
从你这么说,我认为这是你第一次看到这个问题,并且在其他手机上不会发生这种情况。
在此手机型号的 Android 实现中,SmsManager 是否有可能在尝试发送 SMS 消息之前尝试检查手机“状态”。这纯粹是一个猜测,但这似乎并不是一件不合理的事情,尽管 SMS Manager 的电话 API 文档没有提及它。也许不是,我不确定。
由于发送 SMS 消息在您的应用程序中非常重要,因此您当然应该尽一切努力捕获可能与发送消息相关的任何异常(并在可能的情况下从异常状态中恢复)。
由于这个特定问题似乎无法恢复,为什么不在清单中声明 READ_PHONE_STATE 的使用权限呢?