0

我已经读到,当您使用 Android 重新启动时,您的所有 AlarmManager 都会被删除,并且需要重新制作。所以我创建了一个 BootReciever 类,它将通过调用 WakefulIntentService 来重新启动我的所有警报,如下所示:-

public class BootReciever extends BroadcastReceiver {

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

        Log.v("MessageDelay", "Reboot message Recieved");

        try {

            WakefulIntentService.sendWakefulWork(context, BootSetter.class);    


            } catch (Exception e) {
             Toast.makeText(context, "There was an error somewhere, but we still received an alarm", Toast.LENGTH_SHORT).show();
             e.printStackTrace();

            }

    }
 }

在清单中,我声明了它并放置了一个意图过滤器,因此它仅在启动完成时运行,如下所示:-

  <receiver android:name=".BootReciever">
         <intent-filter>
          <action android:name="android.intent.action.BOOT_COMPLETED" />
         </intent-filter>
        </receiver>

现在,在试图解决这个无法正常工作的问题后,我已经开始意识到我的 BootReciever 类在启动后没有被调用,因为它应该是。相反,我的另一个名为 RecieverHandler 的类正在被调用。更令人费解的是,在启动时传递给我的 RecieverHandler 的 Intent 居然有可以无误使用的有效数据。

我的 RecieverHandler 看起来像这样:-

public class RecieverHandler extends BroadcastReceiver
{

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

        try {

             Bundle bundle = intent.getExtras();

             Log.v("MessageDelay", "RecieverHandler is doing boot jobs");

             Intent newIntent = new Intent(context, MessageDispatcher.class);
             newIntent.putExtras(bundle);
            // newIntent.addFlags(Intent.FLAG);
             //context.startService(newIntent);
             WakefulIntentService.sendWakefulWork(context, newIntent);    


            } catch (Exception e) {
             Toast.makeText(context, "There was an error somewhere, but we still received an alarm", Toast.LENGTH_SHORT).show();
             e.printStackTrace();

            }


    }
}

它在清单中声明如下:

<receiver android:name=".RecieverHandler">
        </receiver>

虽然在另一种情况下可能没问题,但我需要在手机打开和手机启动时使用不同的接收器。

总结一下我的问题是: -

为什么 RecieverHandler 处理启动完成的 Intent 并且我的 BootReciever 从未被调用?

重启前的 Intent 数据集如何在重启后仍然有效?

他们是否可以在设备的 SMS 发送功能准备好之前延迟任何操作?

4

1 回答 1

2

您还需要设置接收此意图的权限。< uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 更多详情请访问:http ://www.androidcompetencycenter.com/2009/06/start-service-at-boot/

于 2011-02-24T12:01:53.800 回答