0

我最近在发送短信时遇到了一点麻烦,因为 sendTextMessage 只能发送 160 个字符或更少字符的短信。然而,我希望发送一个希望提示另一个用户输入信息的长文本。

这是我的代码:

//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 的第四个和第五个参数

于 2013-01-03T11:21:22.713 回答