Скриншот на Android Xamarin, Широкий системный скриншот - PullRequest
0 голосов
/ 29 апреля 2018

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

Я где-то заметил, что это возможно на некорневых устройствах, начиная с API 19 или Android 4.0, но я не мог найти способ сделать это.

Я пробовал много решений в интернете, но ничего не получалось. Красных много, но ничего не нашел.

Я нашел этот код, но, конечно, он берет снимок экрана для моего приложения (макет)

Вот метод OnCreate:

    ImageView img;
    protected override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.Main);
        Button btn = FindViewById<Button>(Resource.Id.button1);
        img = FindViewById<ImageView>(Resource.Id.imageView1);
        btn.Click += Btn_Click;
    }

    public byte[] CaptureScreen()
    {
        var view = Window.DecorView.RootView;
        view.DrawingCacheEnabled = true;
        Bitmap bitmap = view.GetDrawingCache(true);
        byte[] bitmapData;
        using (var stream = new MemoryStream())
        {
            bitmap.Compress(Bitmap.CompressFormat.Png, 0, stream);
            bitmapData = stream.ToArray();
        }
        return bitmapData;
    }

Чтобы добавить его в imageView при нажатии кнопки:

 private  void Btn_Click(object sender, EventArgs e)
    {
        Bitmap bitmap = BitmapFactory.DecodeByteArray(CaptureScreen(), 0, CaptureScreen().Length);
        img.SetImageBitmap(bitmap);
    }

но Как я уже сказал: для макета требуется скриншот, а не реальный экран.

Я пытался скрыть или свернуть приложение, но ничего не произошло.

1 Ответ

0 голосов
/ 09 июня 2018

Я понял. После долгих поисков, я обнаружил, что новый класс от java сделает эту работу за вас. Это медиа проекция. Он будет работать на Android Lollipop 5.0 или выше и не нуждается в root и все приложения в магазине игр использовали его, поскольку я пытался загрузить множество приложений, чтобы получить идею сделать снимок экрана.

Вот документация по этому поводу:

https://developer.android.com/reference/android/media/projection/MediaProjection

...