Невозможно отправить смс с помощью SMSManager в Android - PullRequest
14 голосов
/ 25 января 2012

В моем приложении я не хочу использовать отправителя сообщения по умолчанию.Для этого я перешел по следующей ссылке В Android можно ли отправить смс-сообщение нескольким получателям в коде?

  • И этот код тоже работает.Но сообщения, которые я отправляю с помощью этого кода, не сохраняются в исходящих и входящих сообщениях телефонов.
  • В своем коде я использую менеджер смс, как этот

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

Но это не отправка SMS-сообщений. Пожалуйста, помогите мне с тем, как я могу отправить SMS-сообщения в Android - я попытался следующиеслишком PendingIntent sentPI = PendingIntent.getBroadcast (this, 0, new Intent (SENT), 0);

PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0,
new Intent(DELIVERED), 0);
SmsManager sms = SmsManager.getDefault();
sms.sendTextMessage(phoneNumber, null, message, sentPI, deliveredPI);

Это также не работает.
SMSAPPActivity.java

РЕДАКТИРОВАТЬ:

btnSendSMS.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                String message = txtMessage.getText().toString();
                String[] PhnNoArray = new String[2];
                PhnNoArray[0] = "9999999999";
                PhnNoArray[1] = "8888888888";
                // StringTokenizer st = new StringTokenizer(phoneNo, ",");
                smsManager = SmsManager.getDefault();
                for (int i = 0; i < PhnNoArray.length; i++) {
                    smsManager = SmsManager.getDefault();
                        // this is the function that does all the magic
//                      sms.sendTextMessage(phoneNumber, null, msg, pi, null);
                    smsManager.sendTextMessage(PhnNoArray[i], null, message, null,
                            null);
                    Toast.makeText(getBaseContext(), "SMS sent : " + i,
                            Toast.LENGTH_SHORT).show();
                }
}
        });

Пожалуйста, посмотрите редактирование и скажите мне, что я сделал неправильно. Показывает, но смс не получен на другом телефоне с использованием этого кода

Ответы [ 6 ]

21 голосов
/ 06 февраля 2012

Я использовал следующий код для отправки смс на несколько номеров, а отправленные смс сохраняются в сообщениях

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:
                    ContentValues values = new ContentValues();
                    for (int i = 0; i < MobNumber.size() - 1; i++) {
                        values.put("address", MobNumber.get(i).toString());// txtPhoneNo.getText().toString());
                        values.put("body", MessageText.getText().toString());
                    }
                    getContentResolver().insert(
                            Uri.parse("content://sms/sent"), values);
                    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);
    }

чтобы отправить сообщение на несколько номеров, которые я использовал выше, как:

if (MobNumber != null) {

                for (int i = 0; i < MobNumber.size(); i++) {
                    String message = MessageText.getText().toString();
                    String tempMobileNumber = MobNumber.get(i).toString();
                    sendSMS(tempMobileNumber, message);
                }
3 голосов
/ 09 июня 2017

Если вы используете устройство с двумя sim-картами, вам необходимо указать номер отправителя. Вы не можете передать значение null в это время. В противном случае SmsManager выдаст ошибку с именем SmsManager.RESULT_ERROR_GENERIC_FAILURE.

Код для проверки номеров активных симов:

public static int getNumberOfActiveSim(Context context) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
                SubscriptionManager subscriptionManager = SubscriptionManager.from(context);
                List<SubscriptionInfo> subscriptionInfo = subscriptionManager.getActiveSubscriptionInfoList();
                return subscriptionInfo != null ? subscriptionInfo.size() : 0;
            }
            TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            if(telephonyManager != null && telephonyManager.getSimState() == TelephonyManager.SIM_STATE_ABSENT){
                return 1;
            }
            return 0;
        }
3 голосов
/ 25 января 2012

1) добавить сообщения в Отправленные вместо Исходящих, так как Исходящие содержат сообщения, которые должны быть отправлены или находятся в состоянии отправки.

2) при отправке сообщения добавляйте их одновременно в " content: // sms / sent uri.

что мешает вам сохранить их в базе данных. и то, что вы уже пробовали.

используйте приведенный ниже код для отправкиSMS

 smsManager.sendTextMessage(number, null,desc, null, null);

и используя content: // sms / sent URI, вы можете вставить то же текстовое сообщение в базу данных сообщений

2 голосов
/ 11 ноября 2015

Надеюсь, это поможет вам.

MainActivity.java

import android.os.Bundle;
import android.app.Activity;
import android.telephony.SmsManager;
import android.view.Menu;
import android.view.inputmethod.InputMethodManager;
import android.widget.*;
import android.view.View.OnClickListener;
import android.view.*;


public class MainActivity extends Activity implements OnClickListener{


Button click;
EditText txt;
TextView txtvw;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

click = (Button)findViewById(R.id.button);
txt = (EditText)findViewById(R.id.editText);
txtvw = (TextView)findViewById(R.id.textView1);

click.setOnClickListener(this);
}

@Override
public void onClick(View v){


txt.setText("");
v = this.getCurrentFocus();

try{
    SmsManager sms = SmsManager.getDefault();
    sms.sendTextMessage("8017891398",null,"Sent from Android",null,null);
}
catch(Exception e){
    txtvw.setText("Message not sent!");
}
if(v != null){
    InputMethodManager imm =   (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(v.getWindowToken(),0);
  }

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
   }

}

добавить эту строку в AndroidManifest.xml

<uses-permission android:name="android.permission.SEND_SMS" />

enter image description here

1 голос
/ 25 января 2012

просто отправьте прямо ... используя SmsManager. Единственная проблема в том, что пользователь не узнает об этом.

0 голосов
/ 05 марта 2017

В моем случае это был факт, что тело сообщения превышало 160 символов, и мне пришлось использовать sendMultipartTextMessage вместо sendTextMessage.

...