Intereting Posts
Как я могу разблокировать экран программно в Android? Как вставить изображение в действие с помощью студии Android? AsyncTask HttpPost выполняет сбой в 3G, но работает на Wi-Fi Как перехватить все события касания? Сепаратор между кнопками в пользовательской панели кнопок Изменение цвета фона в BottomNavigationView Скрытие панели инструментов с помощью вкладок, сворачивание панели инструментов только тогда, когда вкладки достигают панели инструментов в андроиде Лучшее место для вызова RecyclerView.Adapter.notifyItem *? Google Maps с помощью phonegap в android Как разобрать ответ json с помощью Джексона в Android? Как использовать asynctask для отображения индикатора выполнения, который учитывается? Запись кадров, сгенерированных Open GL ES на Android Команды Gradle выходят из строя на API 23 Изображение эмулятора Google API (armeabi-v7a) Libgdx: SpriteBatch, флеш-шейдер на устройствах Android от Samsung работает некорректно Как ссылаться на файл, хранящийся во внутреннем хранилище, из WebView?

Отобразить представление, используя windowmanager на экране блокировки

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

Другое значение, я хочу отобразить представление (FloatIcon) на экране блокировки, используя windowmanager из службы.

Это мой код до сих пор.

public class FloatIcon extends Service { private WindowManager windowManager; private ImageView floatIcon; @Override public IBinder onBind(Intent intent) { return null; } @Override public void onCreate() { super.onCreate(); windowManager = (WindowManager) getSystemService(WINDOW_SERVICE); floatIcon = new ImageView(this); floatIcon.setImageResource(R.drawable.ic_launcher); floatIcon.setClickable(true); floatIcon.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(getBaseContext(), MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); getApplication().startActivity(intent); } }); final WindowManager.LayoutParams params = new WindowManager.LayoutParams(WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.TYPE_PHONE, WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED + WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT); params.gravity = Gravity.TOP | Gravity.LEFT; params.x = 0; params.y = 100; windowManager.addView(floatIcon, params); } @Override public void onDestroy() { super.onDestroy(); if (floatIcon != null) windowManager.removeView(floatIcon); } } 

Я не мог получить что-то полезное, когда я это сделаю.

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

Используйте WindowManager.LayoutParams.TYPE_SYSTEM_ERROR вместо WindowManager.LayoutParams.TYPE_PHONE, который решит проблему. Это сделает просмотр способным слушать события касания. Однако вы можете использовать WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY, но он не будет слушать события касания

Хотя на вопрос дан ответ, некоторые объяснения: – использование окна TYPE_PHONE с FLAG_SHOW_WHEN_LOCKED будет отображаться только на экране блокировки, если это окно является полноэкранным, – обратитесь к ссылке на андроид , тогда как тип окна TYPE_SYSTEM_ERROR не имеет полного ограничения по экрану, таким образом, проблема.

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