我在尝试发送多部分SMS短信时,从三星设备接收到了崩溃日志,导致崩溃的是以下代码行:
SmsManager.getDefault().sendMultipartTextMessage(phone, null, SmsManager.getDefault().divideMessage(message), null, null)
其中phone
是一个完全指定的非空电话号码,而message
是一个长字符串(长达300个字符),只包含ASCI符号。可能值得注意的是,它包含\n\n
用于文本分隔。
以下是崩溃日志:
Fatal Exception: java.lang.NullPointerException
Attempt to invoke interface method 'java.util.Iterator java.lang.Iterable.iterator()' on a null object reference
android.os.Parcel.readException (Parcel.java:1699)
android.os.Parcel.readException (Parcel.java:1646)
com.android.internal.telephony.ISms$Stub$Proxy.sendMultipartTextForSubscriber (ISms.java:1719)
android.telephony.SmsManager.sendMultipartTextMessageInternal (SmsManager.java:576)
android.telephony.SmsManager.sendMultipartTextMessage (SmsManager.java:544)
我尝试查看 SmsManager
的源代码,以查找崩溃日志中指定的行,但没有找到线索 - 看起来它已被OEM修改。
这也不应该是权限问题,因为我在执行 sendMultipartTextMessage
前会检查短信权限。
崩溃发生在三星Galaxy S6和J530F手机上。除了这两种手机,从未有人报告过此问题。不幸的是,我没有三星设备来进行测试。
有人遇到过这个问题吗?先谢谢了!
send
方法首次抛出异常,您应该将SmsManager.getDefault().divideMessage(message)
放在send
参数之外,以更好地找到异常位置。更好的做法是,您可以通过将其放置在其他位置(例如“关于”活动的onCreate
中)并使用某些常量消息值进行测试来测试此函数。 - ygngyandroid.telephony.SmsManager.sendMultipartTextMessage(SmsManager.java:544)
崩溃,这是我所提到的方法。正如我所说,这种崩溃只发生在三星设备上,而我无法在自己的设备上重现它。 - Roman SamoilenkodivideMessage(message)
和sendMultipartTextMessage
放在某个测试类的两行不同代码中,以更好地找到问题。 - ygngy