sendDataMessage始终会导致空指针异常

时间:2012-03-18 17:57:02

标签: android sms

希望我可以在我遇到的问题上得到一些帮助。我使用“android.telephony.SmsManager”类通过调用API函数发送数据文本消息: “sendDataMessage(...)”,每次调用该函数时,都会得到一个空指针异常。我已经完成了我的研究,发现这可能是由于尝试发送过大的数据消息(大约133字节或更多)而引起的。我发送5个字节 - 所以我知道我没有超出限制。我没有在模拟器上获得空指针异常(虽然我知道模拟器没有正确发送数据SMS消息的其他问题,所以如果模拟器工作,我可能会得到一个错误)。我的代码如下:

SmsManager sm = SmsManager.getDefault();
int SMS_PORT = 8091;
sm.sendDataMessage("5555551212", null, (short)SMS_PORT, "hello".getBytes(), null, null);

根据API文档,我上面提到的3个参数“null”允许为null。我也尝试向最后两个参数发送意图,并在第二个参数中发送一个字符串,但仍然得到空指针异常。

请注意,当我在Android手机上运行时,我收到此异常。我正在运行姜饼,并且正在使用GB的正确API级别。我的android manafest文件确实具有发送短信的适当权限。

空指针异常的logcat如下:

E/AndroidRuntime( 1690): FATAL EXCEPTION: main
E/AndroidRuntime( 1690): java.lang.IllegalStateException: Could not execute method of the activity
E/AndroidRuntime( 1690):        at android.view.View$1.onClick(View.java:2144)
E/AndroidRuntime( 1690):        at android.view.View.performClick(View.java:2485)
E/AndroidRuntime( 1690):        at android.view.View$PerformClick.run(View.java:9081)
E/AndroidRuntime( 1690):        at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime( 1690):        at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime( 1690):        at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime( 1690):        at android.app.ActivityThread.main(ActivityThread.java:3686)
E/AndroidRuntime( 1690):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1690):        at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime( 1690):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
E/AndroidRuntime( 1690):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
E/AndroidRuntime( 1690):        at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 1690): Caused by: java.lang.reflect.InvocationTargetException
E/AndroidRuntime( 1690):        at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1690):        at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime( 1690):        at android.view.View$1.onClick(View.java:2139)
E/AndroidRuntime( 1690):        ... 11 more
E/AndroidRuntime( 1690): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 1690):        at android.os.Parcel.readException(Parcel.java:1328)
E/AndroidRuntime( 1690):        at android.os.Parcel.readException(Parcel.java:1276)
E/AndroidRuntime( 1690):        at com.android.internal.telephony.ISms$Stub$Proxy.sendData(ISms.java:359)
E/AndroidRuntime( 1690):        at android.telephony.SmsManager.sendDataMessage(SmsManager.java:212)
E/AndroidRuntime( 1690):        at com.test.datasmstest.DataSMSTestActivity.DoClick(DataSMSTestActivity.java:55)
E/AndroidRuntime( 1690):        ... 14 more

任何想法 - 是否有任何更多信息可以帮助解决这个问题?

谢谢!

3 个答案:

答案 0 :(得分:2)

我已经知道发生了什么 - 我正在使用sprint手机而sprint不允许数据(二进制)文本消息。我知道这是因为我使用了生成上述空指针异常的相同的应用程序并在非sprint手机(在这种情况下为t-mobile)上运行它。数据文本消息已成功发送。我将它发送到我的冲刺手机上的一个端口,并且发送短信的t-mobile手机发送了以下基于文本的消息:

  

[免费留言:无法向15555551212发送消息。请再试一次   文字中没有符号。]

15555551212是我的短跑电话号码(隐藏的原因显而易见)。

因此,似乎上面的代码在某些运营商手机上运行得非常好,而在其他运营商手机上运行得不是很好。我想我的手机上的sprints实现android没有正确实现sendDataMessage(或故意杀死该函数),因此它会抛出空指针异常。

答案 1 :(得分:1)

Intent smsIntent = new Intent(Intent.ACTION_VIEW);

                smsIntent.setType("vnd.android-dir/mms-sms");

                smsIntent.putExtra("address", "838255");

                smsIntent.putExtra("sms_body","");

                startActivity(smsIntent);

尝试此代码,这样可以正常使用

答案 2 :(得分:0)

如果您需要更多文档,本教程可以为您提供帮助:http://mobiforge.com/developing/story/sms-messaging-android