Способ захвата всего экрана из приложения с плавающим окном - PullRequest
0 голосов
/ 27 апреля 2019

Я пытаюсь реализовать плавающую кнопку виджета (например, Facebook Messenger), которая отображается поверх другого приложения. Кнопка должна мешать отображению другого приложения и отображать весь экран смартфона внизу.

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

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

//Creating the floating window and set its Layout parameters

mFloatViewLayoutParams = new WindowManager.LayoutParams();
mFloatViewLayoutParams.format = PixelFormat.TRANSLUCENT;
mFloatViewLayoutParams.flags = WindowManager.LayoutParams.FORMAT_CHANGED;

mFloatViewLayoutParams.type = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
                ? WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY
                : WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
mFloatViewLayoutParams.gravity = Gravity.START;
mFloatViewLayoutParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
mFloatViewLayoutParams.height = WindowManager.LayoutParams.WRAP_CONTENT;

// adding the floatview to the WindowManager
LayoutInflater inflater = LayoutInflater.from(activity);
mFloatView = inflater.inflate(R.layout.float_view_layout, null);
mWindowManager.addView(mFloatView, mFloatViewLayoutParams);

...
// some clickListener to start the screenshot
ImageButton imageButton = mFloatView.findViewById(R.id.imageButton);
        imageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View v) {
                mActivity.runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        // here I want to get the view of the whole screen to 
                        screenshot it
                    }
                });
            }
        });

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

У меня действительно нет идей о том, как справиться с этой проблемой. Надеюсь, у кого-то есть предположение!

Ура!

...