Intereting Posts
Программная клавиатура Android скрывает входы от CordovaWebView, когда в полноэкранном режиме Как программно отображать / скрыть навигационный ящик Не найден ресурс, который соответствует указанному имени (в 'cardBackgroundColor' со значением '? Android: attr / colorBackgroundFloating') Как определить изменения файлов или папок в Android? Как сделать прокручиваемую вкладку в Android? Не удалось получить неизвестное свойство 'processReleaseGoogleServices' Почему AD не может находиться в верхней части экрана в андроидной активности Tabbed? Обещания для Android? Как вернуть Android SDK Tools в более раннюю версию? В C, tan (30) дает мне отрицательное значение! Зачем? Android: медленная сеть во время телефонных звонков Render Image как поток данных в браузере Android Как обновить импортированный модуль в Android Studio? Инструмент визуализации для мобильных (планшета) Как определить, включен или выключен экран, если уровень API равен 4?

Как создать активность, которая видна поверх экрана блокировки

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

Intent new_intent= new Intent().setClass( context, EIAlertDialog.class ); new_intent.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP ); new_intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK ); context.startActivity( new_intent ); 

И в методе onCreate Activity Activity, я просыпаюсь на экране следующим образом:

 PowerManager powerManager= (PowerManager)getSystemService( Context.POWER_SERVICE ); if (!powerManager.isScreenOn()) { mWakeLock= powerManager.newWakeLock( PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "My Tag" ) mWakeLock.acquire(); } 

Экран проснулся, но активность уведомления не видна, пока я не разблокирую экран.

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

 getWindow().addFlags( WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON ); 

Solutions Collecting From Web of "Как создать активность, которая видна поверх экрана блокировки"

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

Android – это немного противоречие. Он очень открыт, и как разработчик у вас есть доступ ко всему, и вам решать использовать эти силы для добра или зла. Когда я говорю «зло», я не имею в виду вредоносное ПО. Я имею в виду приложения, которые пытаются получить симпатичные и использовать вещи таким образом, чтобы они не предназначались для использования, например, для отправки уведомлений с просьбой использовать приложение больше. Противоречие заключается в том, что у вас фактически нет доступа ко всему, есть несколько частей, которые разработчики решили так важны, что приложение не могло с ними столкнуться. Экран блокировки является одной из этих частей. Вы можете заменить свое домашнее приложение, которое вам нужно, но вам никогда не придется беспокоиться о том, что ваш экран блокировки замены не работает и не позволяет вам получить доступ к вашему телефону.

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

Использование флагов – это правильный способ сделать это, использование диспетчера питания неверно.

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

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

Вы должны использовать любую комбинацию оконных флагов, которые имеют смысл для вашего приложения. Вы можете получить практически любое разумное поведение между различными комбинациями из них. Они используются для будильника, пользовательского интерфейса входящего вызова и т. Д.

Попробуйте это в своей деятельности

 PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); boolean screenOn = pm.isScreenOn();//check id screen is on if(!screenOn){//if not turn it on or wkaeup the screen final PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "Screen On"); wl.acquire(); Toast.makeText(getBaseContext(), "This is WAKEUP SCREEN", Toast.LENGTH_SHORT).show(); Thread timer = new Thread(){ public void run(){ try { sleep(5000); } catch (InterruptedException e) { // TODO: handle exception }finally{ wl.release();// release wakelock important } } }; timer.start(); } getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);//keep the activity running under lock screen.. 

Надеюсь это поможет