我已经读到,当您使用 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 发送功能准备好之前延迟任何操作?