2016-05-05 26 views
0

テキストメッセージを送信するにはどうすればよいですか?シンプルなようですが、それは私のためには機能しません。Androidでテキストメッセージを送信するにはどうすればよいですか?

私はマニフェストに権限を持っている:私はその後、私ののonClickでこのコードを持って

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.healthapp.healthapp"> 

<uses-permission android:name="android.permission.SEND_SMS"/> 

<application ... 

SmsManager smsManager = SmsManager.getDefault(); 

smsManager.sendTextMessage("07123456789", null, "Hello there!", null, null); 

Intent sendIntent = new Intent(Intent.ACTION_VIEW); 
sendIntent.putExtra("sms_body", "default content"); 
sendIntent.setType("vnd.android-dir/mms-sms"); 
          startActivity(sendIntent); 

しかし、私はこれを実行すると、私は「残念ながら、アプリケーションが停止しました。」を取得

とのエラーメッセージ:あなたはあなたのコードでSMSを送信する二つの異なる方法を持っている

FATAL EXCEPTION: main 
Process: com.healthapp.healthapp, PID: 13477 
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.intent.action.VIEW typ=vnd.android-dir/mms-sms (has extras) } 

答えて

2

SmsManagerを使用する場合は、Intent/startActivity()メソッドは必要ありません。このメソッドは、SMSを処理する別のアプリを開こうとします。

smsManager.sendTextMessage()行の後ろのすべてを削除することができます。それ以上はExceptionにはなりません。

SmsManager smsManager = SmsManager.getDefault(); 
smsManager.sendTextMessage("07123456789", null, "Hello there!", null, null); 
+0

ああおかげで?おそらく何かを記録することによって?または、sendTextMessageのnullパラメータの1つを使用しますか? – user2633709

+0

さて、実際のメッセージをエミュレータから実際のデバイスに送ることはできません。しかし、4番目の引数に 'PendingIntent'を渡すことができます。これは結果のコードを含む' Intent'をターゲットコンポーネントに渡しますが、エミュレータがそれをどのように処理するかは分かりません。つまり、すべてが有効であれば実際に成功コードを提供するかどうかはわかりませんが、私はそれがすべきだと思います。私は[回答はこちら](BroadcastReceiver)の一般的な例を持っています(http://stackoverflow.com/questions/24673595/how-to-get-sms-sent-confirmation-for-each-contact-person -in-android/24845193#24845193) –

+0

ありがとう、私はそれがPendingIntentかもしれないと思ったが、私はこれのための構文が分からない。上記でPendingIntentを以下のように定義しますか?Intent sendIntent = new Intent(Intent。ACTION_VIEW); sendTextMessageのパラメータとしてsendIntentを設定しますか? – user2633709

1

あなたが意図によってたい場合は、

sendSmsByViewIntent()、その後SmsManagerで送信

Intent smsVIntent = new Intent(Intent.ACTION_VIEW); 
    // prompts only sms-mms clients 
    smsVIntent.setType("vnd.android-dir/mms-sms"); 

    // extra fields for number and message respectively 
    smsVIntent.putExtra("address", phoneNumber.getText().toString()); 
    smsVIntent.putExtra("sms_body", smsBody.getText().toString()); 
    try{ 
     startActivity(smsVIntent); 
    } catch (Exception ex) { 
     Toast.makeText(MainActivity.this, "Your sms has failed...", 
       Toast.LENGTH_LONG).show(); 
     ex.printStackTrace(); 
    } 

sendSmsByManager()

try { 
     // Get the default instance of the SmsManager 
     SmsManager smsManager = SmsManager.getDefault(); 
     smsManager.sendTextMessage(phoneNumber.getText().toString(), 
       null, 
       smsBody.getText().toString(), 
       null, 
       null); 
     Toast.makeText(getApplicationContext(), "Your sms has successfully sent!", 
       Toast.LENGTH_LONG).show(); 
    } catch (Exception ex) { 
     Toast.makeText(getApplicationContext(),"Your sms has failed...", 
       Toast.LENGTH_LONG).show(); 
     ex.printStackTrace(); 
    } 

によって送信、

ACTION_SENDTOは

// add the phone number in the data 
    Uri uri = Uri.parse("smsto:" + phoneNumber.getText().toString()); 

    Intent smsSIntent = new Intent(Intent.ACTION_SENDTO, uri); 
    // add the message at the sms_body extra field 
    smsSIntent.putExtra("sms_body", smsBody.getText().toString()); 
    try{ 
     startActivity(smsSIntent); 
    } catch (Exception ex) { 
     Toast.makeText(MainActivity.this, "Your sms has failed...", 
       Toast.LENGTH_LONG).show(); 
     ex.printStackTrace(); 
    } 

は、いずれかのこれらの方法試してみてください。あなたは同時に2つのタイプを試しています。メッセージが送信されたことを確認する方法はあります -

最後に主なものは、私は、Android Studioとエミュレータを使用していますのmanifest.xmlで許可

<uses-permission android:name="android.permission.SEND_SMS"/> 
+0

ああ、ありがとう、私はAndroid Studioとエミュレータを使用しています - メッセージが送信されたことを確認する方法はありますか?おそらく何かを記録することによって?または、sendTextMessageのnullパラメータの1つを使用しますか? – user2633709

関連する問題