Смс-менеджер Android не отправляет смс

Я новичок для андроида. Я хочу отправить смс после нажатия кнопки отправки

  1. Сначала я использовал sms-менеджер 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. установить разрешение send_sms на android_manifest.xml

i got zero errors but sms not sending. If you have know answer.

пожалуйста, дайте мне знать, спасибо за чтение.


person Anand    schedule 16.09.2013    source источник
comment
Вы отправляете SMS с реального устройства или эмулятора?   -  person Piyush    schedule 16.09.2013
comment
только через эмулятор..   -  person Anand    schedule 16.09.2013
comment
Вы должны отправить сообщение, используя реальное устройство, а не эмулятор...   -  person Piyush    schedule 16.09.2013


Ответы (3)



Используйте следующий код для отправки смс-сообщения, здесь ошибка будет отображаться в тосте

--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);        
}
person Sourabh Saldi    schedule 16.09.2013
comment
Он отлично работает для меня. Но я столкнулся с некоторой проблемой. Например, сначала я отправляю сообщение на 1234. Оно отправлено и доставлено. Ничего страшного. Второй раз отправляю другой номер 1235. Тоже отправил и доставил. Это также нормально, но проблема в том, что он также показывает состояние предыдущего сообщения (отправлено, доставлено или нет). @Android-фанатик - person Xplosive; 16.02.2015

Также SMS Manager не отправляет сообщения, если длина сообщения превышает 160 для английского текста и 70 для текста с 16-битным алфавитом. Попробуйте отправить небольшой текст на английском языке, чтобы проверить, так ли это. (Вы можете отправлять сообщения из нескольких частей, чтобы отправлять длинные тексты).

person Victoria Klimova    schedule 16.05.2018