Не удалось отправить смс с помощью SMSManager в Android

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

Но это не отправка sms.please, помогите мне с тем, как я могу отправить sms в android – я тоже пробовал сделать слишком PendingIntent sentPI = PendingIntent.getBroadcast (это 0, новый 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(); } } }); 

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

Solutions Collecting From Web of "Не удалось отправить смс с помощью SMSManager в Android"

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

 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); } 

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

2) когда вы отправляете сообщение, добавьте их одновременно в « content: // sms / sent uri.

Что останавливает u для их хранения в базе данных. И то, что вы пробовали.

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

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

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

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

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" /> 

Введите описание изображения здесь

Если вы используете двойное устройство 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; } 

Просто отправьте его напрямую … с помощью SmsManager . Только проблема заключается в том, что пользователь не узнает об этом.

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