Why am I getting a "General error" error when sending SMS?
I am working on an Android project where I need to send an SMS . My application is gathering the information it needs by consuming a web service and this information is very short and clean text. This information is then sent as SMS.
I used a broadcast receiver which will track if the SMS is sent successfully or not and just add a log entry. I used SmsManager to send SMS .
My device has very good wifi strength and good GPRS network. While sending SMS messages, I found that the broadcast receiver was inserting log entries, some for "Successful" and some for "General failure".
Why do multiple SMS fail due to "Generic Failure"? What is the reason for this?
I have googled and found some people say to turn off WiFi. But I need WiFi to use the web service.
Can anyone tell me about this? Is there a solution to this problem?
source to share
If you send a lot of sms together, it will fill up your phone, so some latency is preferable.
Next, if you delay, you need to make sure it is not done on the UI thread, otherwise you will get ANR.
Try to use handlers, my friend suggested this, I tried it and it works great.
As for the general problem, I'm not sure. The Generic name makes it sound like a normal network error.
We hope this information is helpful.
source to share
I had to overcome this common error message with a delay to send one device to multiple numbers. It almost removes the general denial
for(int index=0; index < phone.length; index++){
phonenumber=phone[index];
Toast.makeText(cxt, "Phone number is: "+phonenumber, Toast.LENGTH_LONG).show();
if(index==0){
Send_SMS(phonenumber.toString().trim(), textmessage);
}
else{
new Handler().postDelayed(new Runnable() {
public void run() {
Send_SMS(phonenumber.toString().trim(), textmessage);
}
}, 1000*40);
}
}
public void Send_SMS(String phonenumber, String message){
// here you use sms manager to send the sms
}
source to share
Try the following:
String [] cellArray = phNumbers.getText().toString().split(";");
mMessageSentCount = 0;
String cellno = cellArray[mMessageSentCount].toString().trim();
startSendMessages(cellno);
private void startSendMessages(String ph){
registerBroadCastReceivers();
sendSMS(ph, mBody);
}
private void sendNextMessage(int mMessageSentCount){
String ph = cellArray[mMessageSentCount].toString().trim();
sendSMS(ph, mBody);
}
private boolean thereAreSmsToSend(){
return mMessageSentCount < cellArray.length;
}
private void sendSMS(final String phoneNumber, String message) {
Toast.makeText(getBaseContext(), "Phone number is: "+phoneNumber, Toast.LENGTH_SHORT).show();
String SENT = "SMS_SENT";
String DELIVERED = "SMS_DELIVERED";
SmsManager sms = SmsManager.getDefault();
ArrayList<String> parts = sms.divideMessage(message);
mMessageSentTotalParts = parts.size();
Log.i("Message Count", "Message Count: " + mMessageSentTotalParts);
ArrayList<PendingIntent> deliveryIntents = new ArrayList<PendingIntent>();
ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>();
PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0);
PendingIntent deliveredPI = PendingIntent.getBroadcast(this, 0, new Intent(DELIVERED), 0);
for (int j = 0; j < mMessageSentTotalParts; j++) {
sentIntents.add(sentPI);
deliveryIntents.add(deliveredPI);
}
mMessageSentParts = 0;
sms.sendMultipartTextMessage(phoneNumber, null, parts, sentIntents, deliveryIntents);
}
private void registerBroadCastReceivers(){
registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()) {
case Activity.RESULT_OK:
mMessageSentParts++;
if ( mMessageSentParts == mMessageSentTotalParts ) {
mMessageSentCount++;
if(thereAreSmsToSend()){
sendNextMessage(mMessageSentCount);
} else{
Toast.makeText(getBaseContext(), "All SMS have been sent",Toast.LENGTH_SHORT).show();
}
}
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));
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));
}
source to share