Android: определение момента пробуждения устройства?

Я знаю о вспомогательном классе v4 под названием WakefulBroadcastReceiver, который предназначен для реагирования на пробуждение устройства.

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

Однако я не смог выяснить, какие намерения указать в манифесте приложения, чтобы мой WakefulBroadcastReceiver сработал.

Кто-нибудь знает, как настроить такое приложение, чтобы WakefulBroadcastReceiver обнаруживал все случаи пробуждения устройства?

Во-первых, вот WakefulBroadcastReceiver:

public class MyWakeupReceiver extends WakefulBroadcastReceiver {

    public void onReceive(Context context, Intent intent) {

        Log.i("MyWakeupReceiver", "received wake-up intent: " + intent.toString());

        startWakefulService(context, new Intent(context, MyWakeupService.class));
    }
}

... и вот служба, которая запускается:

public class MyWakeupService extends IntentService {

    public MyWakeupService() {
        super("MyWakeupService");
    }

    @Override
    protected void onHandleIntent(Intent intent) {

        Log.i("MyWakeupService", "onHandleIntent: " + intent.toString());

        // Do stuff here.

        MyWakeupReceiver.completeWakefulIntent(intent);        
    }

}

Наконец, вот мой манифест. Примечание "WHAT_GOES_HERE????" в фильтре намерений.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="my.test.package"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="19" />

    <uses-permission android:name="android.permission.WAKE_LOCK" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

        <receiver android:name="my.test.package.MyWakeupReceiver" android:enabled="true" android:exported="false">

            <intent-filter>
                <action android:name="android.intent.action.WHAT_GOES_HERE????" />
            </intent-filter>

        </receiver>

        <service android:name="my.test.package.MyWakeupService" />

    </application>

</manifest>

Большое тебе спасибо.


person HippoMan    schedule 18.03.2014    source источник
comment
WakefulBroadcastReceiver, предназначенный для ответа на пробуждение устройства Это неверно. См. это: stackoverflow.com/a/26380942/1911652   -  person Atul    schedule 24.05.2016


Ответы (1)


Этому вопросу почти год, вы когда-нибудь понимали это? Я думаю, что действия, которые вы хотели в бите фильтра намерений, были android.intent.action.SCREEN_ON и android.intent.action.SCREEN_Off. Я пытаюсь сделать что-то подобное, но обнаружил, что по какой-то загадочной причине эти действия не могут быть зарегистрированы в манифесте.

person William T. Mallard    schedule 31.01.2015
comment
Нет, к сожалению, я так и не понял этого. Кажется, это одна из вещей, которые невозможны в Android (вздох). Или я все еще что-то упускаю? - person HippoMan; 31.01.2015
comment
облом. Я использую его, чтобы изменить медленный опрос на быстрый опрос данных виджета, медленный, когда телефон спит, быстрый, когда он бодрствует, и пользователь с большей вероятностью увидит мой виджет. Мой следующий план состоит в том, чтобы использовать широковещательную рассылку android.intent.action.USER_PRESENT для перехода от медленной к быстрой, которая, хотя и может быть зарегистрирована в XML, не срабатывает в случаях, когда блокировка клавиатуры отключена. Для обратного перехода к медленному я просто проверю состояние экрана в обработчике сигналов опроса. - person William T. Mallard; 31.01.2015