发送短信时出错

时间:2014-03-26 08:48:12

标签: java android sms

我的Android应用程序正在发送短信,它运行正常。但是,当用户输入错误的号码时,将发送SMS而不会显示错误消息。因此,用户不知道他输入了错误的号码。我该如何解决这个问题?

Activity.java

StringTokenizer st=new StringTokenizer(phoneNo,",");
while (st.hasMoreElements())
{
    String tempMobileNumber = (String)st.nextElement();
    if(tempMobileNumber.length()>0 && sms.trim().length()>0)
    {
        sendSMS(tempMobileNumber, sms);
    }
    else
    {
        Toast.makeText(getBaseContext(),
        "Please enter both phone number and message.",
        Toast.LENGTH_SHORT).show();
    }
}

private 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;
            }
        }
    }, new IntentFilter(DELIVERED));

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

2 个答案:

答案 0 :(得分:2)

您需要验证用户输入是否为电话号码

例如:手机号码必须为10位

String number="2525252212"
Pattern mobileNo= Pattern.compile("\\d{10}");
Matcher matcher = mobileNo.matcher(number);
        if (matcher.matches()) {
            //go on
        } else {
            //Show Dialog 
        }

答案 1 :(得分:0)

我使用的是一个库:libphonenumber https://code.google.com/p/libphonenumber/

那里有一些数字验证方法。除非您想手动实施验证。