Ссылка: https://developer.android.com/reference/android/view/WindowManager.LayoutParams.html
public static final int TYPE_APPLICATION_OVERLAY
Эта константа устарела на уровне API 26 .
для несистемных приложений. Вместо этого используйте TYPE_APPLICATION_OVERLAY.
Тип окна: телефон. These are non-application windows providing user interaction with the phone
(в частности входящие звонки). Эти окна обычно располагаются над всеми приложениями, но за строкой состояния. В многопользовательских системах отображается на всех окнах пользователей.
public static final int TYPE_APPLICATION_OVERLAY
Тип окна: окна наложения приложения отображаются над всеми окнами активности (типы от FIRST_APPLICATION_WINDOW
до LAST_APPLICATION_WINDOW
), но под критическими системными окнами, такими как строка состояния или IME.
Система может изменить положение, размер или видимость этих окон в любое время, чтобы уменьшить визуальный беспорядок для пользователя и управлять ресурсами.
Требуется разрешение Manifest.permission.SYSTEM_ALERT_WINDOW
.
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
Система отрегулирует важность процессов с этим типом окна, чтобы уменьшить вероятность того, что убийца с нехваткой памяти убьет их.
В многопользовательских системах отображается только на экране пользователя-владельца.
мы должны использовать TYPE APPLICATION OVERLAY на устройстве Oreo или позже
у нас уже есть пример как Manoj Perumarath gived
вам нужно определить параметры окна так:
//if device is Oreo or latter if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
//or else
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_PHONE,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
Manifest.xml
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
//...other stuff
<service
android:name=".serviceClass"
android:enabled="true"
android:exported="false"/>
MainActivity
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && !Settings.canDrawOverlays(this)) {
Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION,
Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, APP_PERMISSION_REQUEST);
}
else
{
//start service
}
Читать один раз