Boot Reciever никогда не вызывается после загрузки, но RecieverHandler есть, и с данными? - PullRequest
0 голосов
/ 01 февраля 2011

Я прочитал, что при перезагрузке с 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 с устройства?

1 Ответ

2 голосов
/ 24 февраля 2011

Вам также необходимо установить разрешение на получение этого намерения. <использует-разрешение android: name = "android.permission.RECEIVE_BOOT_COMPLETED" /> Для более подробной информации посетите: http://www.androidcompetencycenter.com/2009/06/start-service-at-boot/

...