android.intent.action.SCREEN_ON не работает как фильтр намерений получателя - PullRequest
8 голосов
/ 04 апреля 2010

Я пытаюсь вызвать BroadcastReceiver при включении экрана. В моем AndroidManifest.xml я указал:

                <receiver android:name="IntentReceiver">
                    <intent-filter>
                            <action android:name="android.intent.action.SCREEN_ON"></action>
                    </intent-filter>
                </receiver>

Однако кажется, что получатель никогда не вызывается (точки останова не срабатывают, операторы журнала игнорируются). Я поменял SCREEN_ON на BOOT_COMPLETED для теста, и вызывает .

Это в проекте 1.6 (SDK level 4).

Поиск кода Google показал это, я скачал проект и синхронизировал его, преобразовал его для работы с новейшими инструментами, но он также не может перехватить это событие.

http://www.google.com/codesearch/p?hl=en#_8L9bayv7qE/trunk/phxandroid-intent-query/AndroidManifest.xml&q=android.intent.action.SCREEN_ON

Возможно, это больше не поддерживается?

Ранее мне удавалось успешно перехватить это событие с помощью вызова Context.registerReceiver () примерно так:

registerReceiver(new BroadcastReceiver() {

  @Override
  public void onReceive(Context context, Intent intent) {
    // ... 
  }
}, new IntentFilter(Intent.ACTION_SCREEN_ON));

Однако это было выполнено долгоживущей Службой. Следуя мудрому совету CommonsWare, я решил попытаться удалить долгоживущую Службу и использовать разные методы. Но мне все равно нужно обнаруживать отключение и включение событий.

Ответы [ 3 ]

13 голосов
/ 05 апреля 2010

Следуя мудрому совету CommonsWare, я решил попытаться удалить долгоживущую Службу и использовать разные техники.

На самом деле, я считаю, что мой совет был скорее голубым...: -)

Но мне все равно нужно обнаруживать события включения и выключения экрана.

Есть определенные события, когда Android не хочет запускать новые процессыдля, поэтому устройство не становится слишком медленным из-за всякого рода вещей, которые все должны запускаться одновременно.ACTION_SCREEN_ON является одним из таких.Смотрите предыдущий вопрос , чтобы получить светло-голубой совет по этой теме.

Итак, вам нужно спросить себя: «Сам, мне действительно нужно контролировать эти события?».Основная команда Android хотела бы, чтобы ваш ответ был «нет».

1 голос
/ 07 декабря 2013
0 голосов
/ 20 апреля 2017

Actullay Я столкнулся с этой проблемой, но успешно ее решаю

1) начать обслуживание с вашего основного вида деятельности

   Intent i = new Intent(MainActivity.this, UpdateService.class);
    startService(i);

2) зарегистрировать получателя в классе обслуживания.

@Override
public void onCreate() {
    super.onCreate();



    // REGISTER RECEIVER THAT HANDLES SCREEN ON AND SCREEN OFF LOGIC
    IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_ON);
    filter.addAction(Intent.ACTION_SCREEN_OFF);
    BroadcastReceiver mReceiver = new ScreenReciever();
    registerReceiver(mReceiver, filter);
}

3) Готово

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...