簡體   English   中英

Android以編程方式發送短信

[英]Android Send SMS programmatically

我正在嘗試以編程方式發送短信,但在某些情況下無法正常工作。

如果我這樣打電話sendSMS("+918444380502", "BAL"); 短信發送成功沒有問題,但是如果我嘗試發送這樣的sendSMS("+918444380502", "El teléfono no está registrado o ligado a un usuario, favor de registrarlo"); 它沒有發送任何線索!

發送短信代碼如下-

//---sends an SMS message to another device---
public void sendSMS(String phoneNumber, String message)
{
    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;
            }
            stopSelf();
        }
    }, new IntentFilter(DELIVERED));

    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);
}

由於您無法使用Unicode字符發送文本,因此請嘗試使用sendMultipartTextMessage

SmsManager sms = SmsManager.getDefault();
ArrayList<String> textMsgs = sms.divideMessage(message);
sms.sendMultipartTextMessage (phoneNumber, null, textMsgs, sentPI, deliveredPI);

感謝Mike M,該代碼對我來說很有效-

private void sendSMS(String number, String msg)
{
    SmsManager sm = SmsManager.getDefault();
    ArrayList<String> parts = sm.divideMessage(msg);

    Intent iSent = new Intent(ACTION_SMS_SENT);
    PendingIntent piSent = PendingIntent.getBroadcast(this, 0, iSent, 0);
    Intent iDel = new Intent(ACTION_SMS_DELIVERED);
    PendingIntent piDel = PendingIntent.getBroadcast(this, 0, iDel, 0);

    if (parts.size() == 1)
    {
        msg = parts.get(0);
        sm.sendTextMessage(number, null, msg, piSent, piDel);
    }
    else
    {
        ArrayList<PendingIntent> sentPis = new ArrayList<PendingIntent>();
        ArrayList<PendingIntent> delPis = new ArrayList<PendingIntent>();

        int ct = parts.size();
        for (int i = 0; i < ct; i++)
        {
            sentPis.add(i, piSent);
            delPis.add(i, piDel);
        }

        sm.sendMultipartTextMessage(number, null, parts, sentPis, delPis);
        stopSelf();
    }
}

public class SmsReceiver extends BroadcastReceiver
{
    @Override
    public void onReceive(Context context, Intent intent)
    {
        String action = intent.getAction();

        if (action.equals(ACTION_SMS_SENT))
        {
            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;
            }
        }
        else if (action.equals(ACTION_SMS_DELIVERED))
        {
            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;
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM