【问题标题】:Android sms manager not sending smsAndroid 短信管理器不发送短信
【发布时间】:2018-05-16 20:27:47
【问题描述】:

我是安卓新手。我想在点击发送按钮后发送短信

  1. 首先我使用了短信管理器 api。
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 权限

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

请告诉我,感谢阅读。

【问题讨论】:

  • 您是从真机还是模拟器发送短信?
  • 仅使用模拟器..
  • 您应该使用真实设备发送消息,而不是使用模拟器...

标签: android sms smsmanager


【解决方案1】:

完成@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
【解决方案2】:

使用以下代码发送短信,这里错误会显示在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);        
}

【讨论】:

  • 它对我来说很好用。但我面临一些问题。例如,起初我向 1234 发送了一条消息。它已发送并已发送。没关系。我第二次发送另一个号码 1235。它也发送和交付。它也可以,但问题是它还显示了以前的消息条件(已发送、已发送或未发送)。 @Android 狂热者
【解决方案3】:

如果英文文本的消息长度超过 160,16 位字母文本的长度超过 70,SMS Manager 也不会发送消息。尝试发送小的英文文本,看看是不是这样。 (您可以发送多个部分消息以发送长文本)。

【讨论】:

    【解决方案4】:
    String incomming = "9876543210";
    android.telephony.SmsManager sms=android.telephony.SmsManager.getDefault();
    sms.sendTextMessage(incomming, null,"Here Is Sms", null, null);
    

    【讨论】:

      【解决方案5】:
      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----");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-07
        • 2014-03-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多