2013-08-19 3 views
0

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

    try 
        { 

         String SENT  = "SMS_SENT"; 


        PendingIntent sentPI = PendingIntent.getBroadcast(this, 0, new Intent(SENT), 0); 

        registerReceiver(new BroadcastReceiver() 
        { 
         @Override 
         public void onReceive(Context arg0, Intent arg1) 
         { 
          int resultCode = getResultCode(); 
          switch (resultCode) 
          { 


          case Activity.RESULT_OK:     
           Toast.makeText(getBaseContext(), "SMS sent",Toast.LENGTH_LONG).show(); 
                      break; 
          case SmsManager.RESULT_ERROR_GENERIC_FAILURE: Toast.makeText(getBaseContext(), "Generic failure",Toast.LENGTH_LONG).show(); 
                      break; 
          case SmsManager.RESULT_ERROR_NO_SERVICE:  Toast.makeText(getBaseContext(), "No service",Toast.LENGTH_LONG).show(); 
                      break; 
          case SmsManager.RESULT_ERROR_NULL_PDU:   Toast.makeText(getBaseContext(), "Null PDU",Toast.LENGTH_LONG).show(); 
                      break; 
          case SmsManager.RESULT_ERROR_RADIO_OFF:  Toast.makeText(getBaseContext(), "Radio off",Toast.LENGTH_LONG).show(); 
                      break; 
          } 
         } 
        }, new IntentFilter(SENT)); 

           SmsManager smsMgr = SmsManager.getDefault(); 
           smsMgr.sendTextMessage(address, null,"Send sms", sentPI, null); 

           } 
        catch (Exception e) 
        { 
         Toast.makeText(this, e.getMessage()+"!\n"+"Failed to send SMS", Toast.LENGTH_LONG).show(); 
         e.printStackTrace(); 
        } 

Как использовать этот код в широковещательном приеме или в обслуживании ?.

ответ

0

Вы не можете зарегистрировать BroadcastReceiver в BroadcastReceiver, потому что BroadcastReceiver не живет очень долго (только на время вызова onReceive(). Так что вам нужно сделать, это начать Service от вашего BroadcastReceiver и иметь его отправить . SMS код, который вы должны работать с Service

+0

, как я могу обработать исключение в службах, когда отправка смс? – Ram

+0

Какое исключение? –

+0

Пример: при перезагрузке у меня есть 0 баланс, В то время смс не отправлено, Служба ждет, пока не будет отправлено sms. Для этого как я могу обращаться с этим – Ram

0

Dont использовать SmsManager.RESULT_ERROR_GENERIC_FAILURE:., так как его не рекомендуется использовать вместо android.telephony.SmsManager Docs

После перезагрузки вызвать Broadcast Ресивер:

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 

public class MyReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
    Intent service = new Intent(context, YourService.class); 
    context.startService(service); 
    } 
} 

Ваших Услуги:

import android.app.Service; 
import android.content.Intent; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.telephony.SmsManager; 
import android.widget.Toast; 

public class YourService extends Service { 


@Override 
public void onCreate() { 

} 

@Override 
public IBinder onBind(Intent arg0) { 
    return null; 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
} 

@Override 
public void onStart(Intent intent, int startId) { 
    super.onStart(intent, startId); 

    // 
    SmsManager smsManager = SmsManager.getDefault(); 
    smsManager.sendTextMessage(number to send , null, text, null, null); 
} 

@Override 
public boolean onUnbind(Intent intent) { 

} 

} 

Убедитесь, что у добавить требуемое разрешения, приемник и службу в файле манифеста

+0

Как я могу обработать исключение в службе отправки смс? – Ram

+0

Исключение ?? u может использовать блок try/catch в методе oncreate. –

+0

Почему я знаю, что sms отправлено или нет? – Ram