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?

+3


source to share


8 answers


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.

+3


source


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
}

      

+2


source


add these permissions to your AndroidManifest file

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

      

0


source


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

      

0


source


I came across a similar problem. After a couple of minutes, I found that the phone number I am trying to send is not valid.

So anyone has this problem, check your phone number first!

0


source


I had the same problem and found out that I was out of my credit balance on my mobile.

0


source


I found that when the data is over 160 characters, I got a general rejection.

0


source


I had the same problem and solved it by removing the sim phone from sendTextMessage

and doing itnull

0


source







All Articles