Intereting Posts
Необходимо отключить расширение на CollapsingToolbarLayout для определенных фрагментов Импорт org.apache.http.client не может быть разрешен при обновлении sdk до M Пространства SPAN_EXCLUSIVE_EXCLUSIVE не могут иметь нулевую длину Автоматизация выбора номера в android с использованием эспрессо Как управлять несколькими версиями одного и того же приложения для Android База данных Android SQLite, таблица отката WHY и воссоздание при обновлении Android usb host api и USB-накопитель Glide: Как найти, если изображение уже кэшировано и использовать кешированную версию? Копирование каталогов и файлов из папки res / raw на SD-карту – андроид Различия между / sdcard / emulated / 0 и / sdcard Android Wear: программный экран пробуждения Пауза / остановка и запуск / возобновление Java TimerTask непрерывно? Как я могу разобрать xml из url в android? Android: autoLink для телефонных номеров не всегда работает Студия Android, град и NDK

Android: Wake & unlock phone

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

public class WakephoneActivity extends Activity { BroadcastReceiver mReceiver; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // Log.v(TAG, "Screen OFF onReceive()"); screenOFFHandler.sendEmptyMessageDelayed(0, 2000); } }; } private Handler screenOFFHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); // do something // wake up phone // Log.i(TAG, "ake up the phone and disable keyguard"); PowerManager powerManager = (PowerManager) WakephoneActivity.this .getSystemService(Context.POWER_SERVICE); long l = SystemClock.uptimeMillis(); powerManager.userActivity(l, false);// false will bring the screen // back as bright as it was, true - will dim it } }; protected void onResume() { super.onResume(); IntentFilter filter = new IntentFilter(Intent.ACTION_SCREEN_OFF); registerReceiver(mReceiver, filter); // Log.i(TAG, "broadcast receiver registered!"); } } 

Я также добавил код в манифест. Есть идеи?

Solutions Collecting From Web of "Android: Wake & unlock phone"

Используйте этот код ниже в своем сервисе.

 PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE); mWakeLock = pm.newWakeLock((PowerManager.SCREEN_DIM_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP), "YourServie"); mWakeLock.acquire(); [...] mWakeLock.release(); 

Если вы хотите разблокировать экран, зарегистрируйте ресивер в своей службе, который контролирует включение / выключение экрана, а если он выключен и вы хотите разблокировать телефон, начните действие с помощью этого кода в onCreate :

 Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); this.finish(); return; 

Я знаю, это довольно грязно, но, насколько я знаю, нет другого способа разблокировать lockscreen (и это будет работать только в том случае, если нет паролей и т. Д., Поэтому он должен быть нормальным «слайдом для разблокировки», экран).

И не забудьте добавить android.permission.WAKE_LOCK 😉

/ Edit: Я только что видел, что вы уже используете Activity. Если у вас есть и вам вообще не нужна услуга, просто введите этот код в свою деятельность.

Чтобы сервис всегда был активным, вы должны иметь это разрешение на манифест:

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

Еще одна вещь, которую вам нужно сделать, – это заказать Wake Wake. Без него услуга закончится через некоторое время. Вы можете сделать это следующим образом:

 getApplicationContext(); PowerManager pm = (PowerManager)getApplicationContext().getSystemService(Context.POWER_SERVICE); WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG); wl.acquire(); 

Возможно, вам потребуется изменить PowerManager.PARTIAL_WAKE_LOCK на тот, который вам нужен. Вы можете увидеть информацию об этом здесь .

Существует WakefulBroadcastReceiver который делает это за вас. Пример использования:

 import android.content.Context; import android.content.Intent; import android.os.SystemClock; import android.support.v4.content.WakefulBroadcastReceiver; import android.util.Log; public class SimpleWakefulReceiver extends WakefulBroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // This is the Intent to deliver to our service. Intent service = new Intent(context, SimpleWakefulService.class); // Start the service, keeping the device awake while it is launching. Log.i("SimpleWakefulReceiver", "Starting service @ " + SystemClock.elapsedRealtime()); startWakefulService(context, service); } } 

После завершения действия в службе вызовите SimpleWakefulReceiver.completeWakefulIntent(intent) чтобы освободить блокировку SimpleWakefulReceiver.completeWakefulIntent(intent) .

(Поскольку @Force уже дал вам информацию о wakeLock, их здесь не нужно повторять 😉