0

sendTextMessageは160文字以下のSMSしか送信できないため、最近SMSの送信で少し問題が発生しました。ただし、別のユーザーに情報の入力を促すための長いテキストを送信したいと思います。

これが私のコードです:

//sends a SMS message to another device
private void sendSMS(String phoneNo, String text)
{     

    String SENT = "SMS_SENT";
    String DELIVERED = "SMS_DELIVERED";

    PendingIntent sentPI = PendingIntent.getBroadcast(this, 0,
        new Intent(SENT), 0);

    PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
        new Intent(DELIVERED), 0);

    //when the SMS has been sent
    registerReceiver(new BroadcastReceiver(){
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            switch (getResultCode())
            {
                case Activity.RESULT_OK:
                    Toast.makeText(getBaseContext(), "SMS sent", 
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
                    Toast.makeText(getBaseContext(), "Generic failure", 
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NO_SERVICE:
                    Toast.makeText(getBaseContext(), "No service", 
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_NULL_PDU:
                    Toast.makeText(getBaseContext(), "Null PDU", 
                            Toast.LENGTH_SHORT).show();
                    break;
                case SmsManager.RESULT_ERROR_RADIO_OFF:
                    Toast.makeText(getBaseContext(), "Radio off", 
                            Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    }, new IntentFilter(SENT));

    //when the SMS has been delivered 
    registerReceiver(new BroadcastReceiver(){
        @Override
        public void onReceive(Context arg0, Intent arg1) {
            switch (getResultCode())
            {
                case Activity.RESULT_OK:
                    Toast.makeText(getBaseContext(), "SMS delivered", 
                            Toast.LENGTH_SHORT).show();
                    break;
                case Activity.RESULT_CANCELED:
                    Toast.makeText(getBaseContext(), "SMS not delivered", 
                            Toast.LENGTH_SHORT).show();
                    break;                      
            }
        }
    }, new IntentFilter(DELIVERED));



    displaySent(text, phoneNo);     

    SmsManager sms = SmsManager.getDefault();
    ArrayList<String> parts = sms.divideMessage(text);
    sms.sendMultipartTextMessage(phoneNo, null, parts, sentPI, deliveredPI);***********

    //SmsManager sms = SmsManager.getDefault();
    //sms.sendTextMessage(phoneNo, null, text, sentPI, deliveredPI);



}

Asterixsでマークされた行に、「SmsManager型のメソッドsendMultipartTextMessage(String、String、ArrayList、ArrayList、ArrayList)は引数(String、null、ArrayList、PendingIntent、PendingIntent)に適用できません」というエラーが表示されます。これがお役に立てば幸いです。

これに関する助けをいただければ幸いです。

ちなみに、テキストメッセージを送信するすべての方法が、すべてのメッセージをそれ自体ですでに分割できる方法ではないのはなぜだろうか。sendMultipartMessageがsendTextMessageの仕事をすることができると私が仮定するとき、なぜsendTextMessageとsendMultipartTextMessageが必要なのですか。これがなぜそうなるのかについての提案も大歓迎です。

4

1 に答える 1

2

sendMultipartTextMessageを使用してメッセージを送信する場合は、コードを変更します。

SmsManager sms = SmsManager.getDefault();
ArrayList<String> parts = sms.divideMessage(text);


ArrayList<PendingIntent> sentPIarr = new ArrayList<PendingIntent>();
ArrayList<PendingIntent> deliveredPIarr = new ArrayList<PendingIntent>();

for (int i = 0; i < parts.size(); i++) {
sentPIarr.add(PendingIntent.getBroadcast(this, 0,new Intent(SENT), 0));
deliveredPIarr.add(PendingIntent.getBroadcast(this, 0,new Intent(DELIVERED), 0));
}

sms.sendMultipartTextMessage(phoneNo, null, parts, sentPIarr, deliveredPIarr); 

sendMultipartTextMessageメソッドは、ArrayListをpendingIntentsの4番目と5番目のパラメーターとして受け取るためです。

于 2013-01-03T11:21:22.713 に答える