2012-01-12 2 views
0

Я новичок в android.I пытался зарегистрировать Broadcastreceiver в основном классе, чтобы получать sms.But, когда im работает logcat показывает «ошибка при получении трансляции намерения», и приложение становится силой close.Whats решение для этого ? Вот мой код:Как зарегистрировать BroadcastReceiver

public class Yes extends Activity { 
/** Called when the activity is first created. */ 
private Retrieve receiver = null; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Button start=(Button)findViewById(R.id.bt1); 
start.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      receiver = new Retrieve(); 
       registerReceiver(receiver,new 
          IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 

      } 
      }); 
       } 
      private class Retrieve extends BroadcastReceiver 
       { 

public void onReceive(Context context, Intent intent) { 

    Bundle bundle = intent.getExtras(); 

    Object messages[] = (Object[]) bundle.get("pdus"); 
    SmsMessage smsMessage[] = new SmsMessage[messages.length]; 
    for (int n = 0; n<messages.length; n++) { 
    smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); 
    smsMessage[0].getMessageBody(); 

    } 

    // show first message 
    Toast toast = Toast.makeText(context, 
    "Received SMS: " + smsMessage[0].getMessageBody(), Toast.LENGTH_LONG); 
    toast.show(); 
      }} 

Я поставил кнопку запуска и я попытался rgister приемника в том, что button обеспечивает разрешение в файл манифест, чтобы получить sms.i не написать фильтр намерений в manifest.I думает как я зарегистрировать приемник совершенно неправильно от того, что я хочу, чтобы do.help меня ...

ответ

0

в вашей деятельности за пределами, создать трансляцию (или записать его в виде отдельного класса):

private BroadcastReceiver smsReceiver = new BroadcastReceiver(){ 
public void onReceive(Context context, Intent intent) { 
    //do your task 
    } 
} 

в onClick просто зарегистрируйте Получатель:

registerReceiver(smsReceiver, filter); 
+0

Спасибо, Джон, вам нужен полуколон после вашего кода? Теперь моя ошибка сказала, что у вас нет вызова для отмены регистрации приемника? Как я могу отменить регистрацию, если я зарегистрирую его внутри кнопки. Сообщение тоста также не появляется. Только заметьте панель уведомлений. Что делать? – divya

+0

проблема решена после того, как я зарегистрирую приемник в файле манифеста и написал код для трансляции в отдельном классе. – divya

+0

call unRegisterReceiver (smsReceiver); когда вам это больше не нужно ... Например, в onstop() mehtod Activity. Если я зарегистрируюсь в манифесте, я думаю, что Android будет управлять им автоматически – JohnCookie