Android短信管理器不发送短信

时间:2013-09-16 12:46:36

标签: android sms smsmanager

很新的android。我想在点击发送按钮后发送短信

  1. 首先我使用了sms manager api。
  2. package com.example.smsproject;
    import android.app.Activity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.telephony.SmsManager;
    import android.view.View;`enter code here`
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.Toast;
    
    public class Page2Activity extends Activity {
    
      Button button;
      EditText textPhoneNo;
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          setContentView(R.layout.main);
    
          button = (Button) findViewById(R.id.button1);
          textPhoneNo = (EditText) findViewById(R.id.mobilenumber);
    
          button.setOnClickListener(new OnClickListener() {
    
              @Override
    
          public void onClick(View v){
    
          //String phoneNo = textPhoneNo.getText().toString();
          String phoneNo = "tel:xxxxxxxxxx";
          String messageText = "SMS FROM ANDROID";
          try {
              SmsManager smsManager = SmsManager.getDefault();
              smsManager.sendTextMessage(phoneNo, null, messageText, null, null);
              Toast.makeText(getApplicationContext(), "SMS Sent Successfully!",
                          Toast.LENGTH_LONG).show();
          }catch (Exception e){
    
              Toast.makeText(getApplicationContext(),
                      "SMS failed, please try again later ! ",
                      Toast.LENGTH_LONG).show();
              e.printStackTrace();
    
          }
    
              }
    
          });
    
      }
    
    }
    
    1. 在android_manifest.xml上设置send_sms权限

    2. 我得到零错误,但短信没有发送。如果你知道答案。

      请让我知道,谢谢你的阅读。

5 个答案:

答案 0 :(得分:14)

完成@Android Fanatic的回答

如果文字太长,邮件不会消失,您必须遵守编码的最大长度。

可以找到更多信息here

我更喜欢这种方法

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

ArrayList<PendingIntent> sendList = new ArrayList<>();
sendList.add(sentPI);

ArrayList<PendingIntent> deliverList = new ArrayList<>();
deliverList.add(deliveredPI);

sms.sendMultipartTextMessage(phoneNumber, null, parts, sendList, deliverList);

答案 1 :(得分:5)

使用以下代码发送短信息,此处错误将显示在Toast

--sends an SMS message to another device---
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 :(得分:2)

如果英文文本的消息长度超过160,则SMS Manager也不会发送消息,对于16位字母文本,消息长度为70。尝试发送小英文文本以查看是否属实。 (您可以发送多个部分消息来发送长文本。)

答案 3 :(得分:1)

String incomming = "9876543210";
android.telephony.SmsManager sms=android.telephony.SmsManager.getDefault();
sms.sendTextMessage(incomming, null,"Here Is Sms", null, null);

答案 4 :(得分:0)

Log.d("SMS ready to send", "----FIRST CALL----");
String number = "111111111111"; //ed1.getText().toString();
String message =  "Test SMS DATA"; //ed2.getText().toString();

Log.d("SMS ready to send", "----SECOND CALL----"+number);
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(number, null, message, null, null);

Log.d("SMS ready to send", "----THIRD CALL----");