Я прочитал, что при перезагрузке с 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 при запуске, содержит действительные данные, которые можно использовать без ошибок.
Мой 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 с устройства?