2012-03-18 14 views
1

うまくいけば、私が持っている問題について助けを得ることができます。私は "android.telephony.SmsManager"クラスを使用してAPI関数を呼び出してデータテキストメッセージを送信しています: "sendDataMessage(...)"と関数が呼び出されるたびに、NULLポインタ例外が発生します。私は私の研究を行ったが、これはデータメッセージ(133バイト以上のオーダー)をあまりにも多く送信しようとすることによって引き起こされる可能性があることを発見した。私は5バイトを送信しています - 私は限界を超えていないことを知っています。私はエミュレータ上でnullポインタ例外を取得しません(エミュレータが正常にデータSMSメッセージを送信していないので、エミュレータが動作した場合にエラーが発生する可能性があります)。私のコードは次のようになります:sendDataMessageは常にヌルポインタ例外を発生させます

私は上記の "null"として3つの引数をnullにすることができます。私はまた、最後の2つの引数にインテントを送信し、2番目の引数に文字列を送信しようとしましたが、まだヌルポインタの例外を取得しています。

私はアンドロイド携帯電話を使用しているときにこの例外が発生しています。私はジンジャーブレッドを使い、GBの正しいAPIレベルを使用しています。私のAndroid manafestファイルには、SMSを送信するための適切な権限があります。次のように

nullポインタ例外の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

あなたのlogcatのダンプを投稿してください! –

+0

私はlogcatの猫を投稿しました - 上記を参照してください - ありがとう。 – Rob

答えて

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); 

あなたはより多くのドキュメントが必要な場合は、これは

+0

私はチャンスを得るとすぐにこれを試してみます。しかし、バイナリ(データ)SMSではなく、テキストベースのSMSを送信するように見えます。私は正しいですか?もしそうなら、これは私にとってはSMSが特定のポートに送られるように私のアプリケーションだけがそれを取得するように私にとっては機能しません。 – Rob

0

正常に動作します。このコードを試してみてください、このチュートリアルでは、あなたを助けることができる:私は何が起こっているかを考え出したhttp://mobiforge.com/developing/story/sms-messaging-android

+0

ありがとう - 私は昨夜私のGoogle検索でこれを見つけました。これはテキストベースのSMSを送信する方法に関する素晴らしい記事です。私はうまく働いている。それは私にヌルポインタを与えているバイナリSMSを送信しています。私はバイナリSMSをユーザに提示されていないものとして使用したいと思います。代わりに、特定のポートにアドレス指定することができます。このようにして、私は自分のアプリだけがSMSを取得し、ユーザーはそれを見ることがないことを保証することができます。私はこれがどんなキャリアのためにプッシュ電子メールがどのように働くかと想像しています。 – Rob

2

- 私はスプリントの携帯電話を使用していますsprintはデータ(バイナリ)テキストメッセージを許可しません。私は上記のヌルポインタ例外を生成し、非スプリントハンドセット(この場合はt-mobile)で実行したのと同じ正確なアプリケーションをとったので、これを知っています。データテキストメッセージが正常に送信されました。私はそれが私のスプリントの携帯電話上のポートに宛てた、およびテキストメッセージを送信したT-の携帯電話は、それに送られた次のテキストベースのメッセージが表示されました:

[フリーメッセージ:15555551212にメッセージを送信することができません。本文中の記号ずにもう一度 を試してみてください。]

15555551212私のスプリントの電話番号は、(明白な理由のために隠された)されていたであろう場所です。

上記のコードは、一部のキャリアハンドセットではうまく動作し、他のハンドセットではうまく動作しないようです。私は携帯電話でアンドロイドのスプリントの実装がsendDataMessageを正しく実装していない(または故意にその関数を殺す)ように、NULLポインタの例外をスローすると思います。

関連する問題