Почему я получаю сообщение об ошибке «Generic Failure» при отправке SMS? - PullRequest
3 голосов
/ 19 марта 2012

Я работаю над проектом Android, куда мне нужно отправить SMS .Мое приложение собирает требуемую информацию , используя веб-службу , и эта информация очень короткая и чистый текст. Эта информация затем отправляется в форме SMS.

Я использовал широковещательный приемник , который будет отслеживать, успешно ли отправлено SMS или нет, и просто добавить запись в журнал.Я использовал SmsManager для отправки SMS .

У моего устройства очень хорошая WiFi и хорошая сеть GPRS.При отправке SMS я обнаружил, что широковещательный приемник вставляет записи журнала, некоторые для «Успешно», а некоторые для «Общий сбой».

Почему несколько SMS не удается из-за «общего сбоя»?В чем причина этого?

Я гуглил и обнаружил, что некоторые люди говорят, чтобы выключить WiFi.Но для использования веб-сервиса мне нужно включить WiFi.

Может кто-нибудь дать представление об этом?Есть ли решение этой проблемы?

Ответы [ 8 ]

3 голосов
/ 30 октября 2012

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

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

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

Что касается проблемы Generic, я не уверен ... Название Generic делает его похожим на обычную сетевую ошибку.

Надеюсь, эта информация полезна.

2 голосов
/ 13 декабря 2013

Мне уже приходилось преодолевать это общее сообщение об ошибке с помощью временной задержки для отправки одного устройства на несколько номеров. Это почти полностью устраняет общий отказ

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
}
0 голосов
/ 04 июля 2019

У меня была такая же проблема, и я решил ее, удалив сим-телефон из sendTextMessage и сделал null

0 голосов
/ 23 октября 2017

Я обнаружил, что как только данные превышают 160 символов, я получаю общий сбой.

0 голосов
/ 19 марта 2016

У меня была такая же проблема, и я обнаружил, что на моем мобильном телефоне не было моего кредитного баланса.

0 голосов
/ 25 июля 2014

Я столкнулся с подобной проблемой. Через пару минут я обнаружил, что номер телефона, который я пытаюсь отправить, неверен.

Таким образом, у любого есть эта проблема, пожалуйста, сначала проверьте номер телефона!

0 голосов
/ 25 января 2014

Попробуйте это:

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 голосов
/ 19 марта 2012

добавьте эти разрешения в ваш файл AndroidManifest

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