Не удалось отправить смс с помощью SMSManager в Android
В моем приложении я не хочу использовать отправителя сообщения по умолчанию. Для этого я выполнил следующую ссылку В Android можно отправить sms-сообщение нескольким получателям в код?
- И этот код тоже работал. Но сообщения, которые я отправляю из этого
код не сохраняется в исходящих и входящих почтовых ящиках.
-
Я использую sms-менеджер, как это в своем коде
SmsManager sms = SmsManager.getDefault(); sms.sendTextMessage(номер телефона, null, сообщение, null, null);
Но это не отправка 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
EDIT:
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 не получен на другом телефоне, используя этот код
Ответы
Ответ 1
Я использовал следующий код для отправки sms на несколько номеров и отправил 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);
}
Ответ 2
1) добавлять сообщения в Отправленные вместо Исходящих, поскольку Исходящие содержат сообщения, которые предполагается отправить или в состояние отправки.
2), когда вы отправляете сообщение, добавьте их одновременно в " content://sms/sent uri.
что останавливает u для их хранения в базе данных. и что вы пробовали еще.
используйте код ниже для отправкиSMS
smsManager.sendTextMessage(number, null,desc, null, null);
и
используя content://sms/sent URI, вы можете вставить одно и то же текстовое сообщение в базу данных сообщений
Ответ 3
Надеюсь, это поможет вам.
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" />
![введите описание изображения здесь]()
Ответ 4
Если вы используете устройство с двумя 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;
}
Ответ 5
просто отправьте его напрямую... используя SmsManager
. Только проблема в том, что пользователь этого не знает.
Ответ 6
В моем случае это было то, что тело сообщения превысило 160 символов, и мне пришлось использовать sendMultipartTextMessage
вместо sendTextMessage
.