Android 从onBootBroadcastreceiver调用SmsBroadcastreceiver?

Android 从onBootBroadcastreceiver调用SmsBroadcastreceiver?,android,broadcastreceiver,boot,app-startup,Android,Broadcastreceiver,Boot,App Startup,我有一个Sms广播接收器类,它扩展了broadcastreceiver来处理传入的Sms,我想让它在启动时运行。我如何从我的onBootReceiver类激活它,它也扩展了broadcastreceiver 我的SmsBroadcastReceiver.java如下所示 public class SmsBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context konte

我有一个Sms广播接收器类,它扩展了broadcastreceiver来处理传入的Sms,我想让它在启动时运行。我如何从我的onBootReceiver类激活它,它也扩展了broadcastreceiver

我的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
        }
    }
}

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

}

否。您不能从另一个广播接收器注册广播接收器,尤其是当原始广播接收器已在舱单中注册时。托管MyBootReceiver的进程可能会在onReceive结束后的几秒钟内终止,因为启动时有大量进程搅动,这意味着您的内部接收器会消失。Ohh感谢您让我知道。OP希望只在启动时注册它,所以认为这是唯一的方法。我想让它在启动时运行-这是什么意思?BroadcastReceiver在收到广播之前不会运行。当收到短信时,您的广播接收器将运行。这是完全正常的。在开机时你想完成什么?当手机启动时它准备好了吗?是的。但是,请注意,在Android 3.1及更高版本上,用户必须在安装后运行一次应用程序,然后才能使用任何广播接收器。