ImageView внутри WindowManager не отображается в Android 4.1 и 4.4 на домашнем экране

У меня есть ImageView со статическим изображением. Когда я добавляю этот ImageView в WindowManager с помощью TYPE_PHONE, он прекрасно отображается на всех версиях Android (4.1, 4.4, 5.0). Однако, когда я нажимаю кнопку "Домой" и выхожу из приложения, в 4.1 и 4.4 ImageView исчезает. Отлично работает в 5.0

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

1613-1613/info.bosung.smate E/OpenGLRenderer﹕ Getting MAX_TEXTURE_SIZE from GradienCache
1613-1613/info.bosung.smate E/OpenGLRenderer﹕ MAX_TEXTURE_SIZE: 16384
1613-1613/info.bosung.smate E/OpenGLRenderer﹕ Getting MAX_TEXTURE_SIZE from Caches::initConstraints()
1613-1613/info.bosung.smate E/OpenGLRenderer﹕ MAX_TEXTURE_SIZE: 16384

Я включил 3 скриншота, показывающих, что происходит (4.4 и 4.1 тоже разные).

пример ImageView не работает в 4.4 и 4.1

Вот мой код.

public class MainActivity extends ActionBarActivity {

private WindowManager windowManager;
ImageView rocketImage1;

WindowManager.LayoutParams params;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);

    rocketImage1 = new ImageView(this);
    rocketImage1.setBackgroundResource(R.drawable.a1);

    // Setup layout parameter
    params = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.WRAP_CONTENT,
            WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

    params.gravity = Gravity.TOP | Gravity.LEFT; // Orientation
    params.x = 150; // where you want to draw this, coordinates
    params.y = 150;
    params.alpha = 0.5f;
    params.width = 150;
    params.height = 250;

    // At it to window manager for display, it will be printed over any thing
    windowManager.addView(rocketImage1, params);
 }
 }

3 ответа

Решение

Я смог решить проблему, запустив WindowManager из службы. По существу, что-то изменилось в жизненном цикле Android 5, что заставило его работать из Activity, что на самом деле меня больше смутило.

Вот код, который на самом деле работает.

Анимация ImageView внутри WindowManager - Android

Ты можешь использовать:

windowManager = (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE);

Установить это разрешение:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
Другие вопросы по тегам