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
任何想法 - 是否有任何更多信息可以帮助解决这个问题?
谢谢!
答案 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