Intereting Posts
SpeechRecognizer с Google Search версии 3.6.14.1337016 не может распознавать другие голосовые языки, кроме стандартных Фатальный сигнал 11 (SIGSEGV) при 0x00000000 (код = 1) – PhoneGap Фрагмент Загрузка транзакции пустой, но фрагмент показан после вращения устройства InputFilter на EditText вызывает повторный текст Android Alarm Manager с широковещательным приемником, зарегистрированным в коде, а не манифестацией Уведомления о двойном gcm «Префикс« xliff »для элемента« xliff: g »не связан» Шаблон активности приложения Android Studio для Android по умолчанию не показывает значок гамбургера, только значок стрелки Чтение и запись целочисленного массива для посылки Как проверить, действительно ли позиция в StreetView на Android Android Studio – Как скопировать проект? Есть ли способ создать графики xxhdpi, xhdpi, hdpi, mdpi и ldpi из крупномасштабного изображения? Сохранение обслуживания во время изменений ориентации Как узнать код зоны и идентификатор ячейки в телефоне android Как реализовать кнопку на Android-виджете

ACTION_SCREEN_ON и ACTION_SCREEN_OFF не работают?

Я пытаюсь отключить WiFi, когда экран выключен (заблокирован), и снова включите его, когда экран включен (разблокирован).

Я сделал BroadcastReceiver ; Вставьте этот код в манифест:

 <receiver android:name="MyIntentReceiver"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> <action android:name="android.intent.action.SCREEN_OFF" /> <action android:name="android.intent.action.SCREEN_ON" /> <action android:name="android.intent.action.USER_PRESENT" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </receiver> 

И это класс MyIntentReceiver :

 package org.androidpeople.boot; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; public class MyIntentReceiver extends BroadcastReceiver { // Called when boot completes public static boolean startup; @Override public void onReceive(Context context, Intent intent) { // Set what activity should launch after boot completes System.out.println("Intent Action: " + intent.getAction()); if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { System.out.println("locked : ACTION_SCREEN_OFF"); } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { System.out.println("not locked : ACTION_SCREEN_ON "); } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { System.out.println("User Unlocking it "); } else if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) { // this to indicate that program is running // automaticlly not manually by user startup = true; System.out.println("Automatic BOOT at StartUp"); Intent startupBootIntent = new Intent(context, LaunchActivity.class); startupBootIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(startupBootIntent); } } } 

И результат – и ACTION_SCREEN_ON и ACTION_SCREEN_OFF никогда не срабатывали! USER_PRESENT и BOOT_COMPLETED работали нормально, а другие – нет. Я использую эмулятор, а не реальное устройство – может ли это вызвать проблему?

Любая помощь? Мне нужно включить и выключить экран, чтобы включить / отключить Wi-Fi для экономии батареи.

заранее спасибо

Solutions Collecting From Web of "ACTION_SCREEN_ON и ACTION_SCREEN_OFF не работают?"

Вы не можете поймать эти намерения через XML (я забыл, почему). Однако вы можете использовать Service который регистрирует член BroadcastReceiver в его onStartCommand() и onDestroy() его в своем onDestroy() . Это потребует, чтобы служба работала в фоновом режиме, постоянно или до тех пор, пока вам это нужно, поэтому обязательно исследуйте альтернативные маршруты.

Вы можете определить BroadcastReceiver в своем классе Service следующим образом:

 private final class ScreenReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, final Intent intent) { if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) { //stuff } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) { //other stuff } } } 

Для немного сложного примера, но тот, который показывает, как BroadcastReceiver и Service взаимодействуют, см. CheckForScreenBugAccelerometerService из моего приложения ElectricSleep.

Чтобы захватить действия SCREEN_OFF и SCREEN_ON (и, возможно, другие), вы должны настроить BroadcastReceiver по коду, а не через манифест.

 IntentFilter intentFilter = new IntentFilter(Intent.ACTION_SCREEN_ON); intentFilter.addAction(Intent.ACTION_SCREEN_OFF); BroadcastReceiver mReceiver = new ScreenStateBroadcastReceiver(); registerReceiver(mReceiver, intentFilter); 

Он протестирован и работает правильно.