代码之家  ›  专栏  ›  技术社区  ›  Kaj

Android Xamarin上的屏幕截图,宽系统屏幕截图

  •  0
  • Kaj  · 技术社区  · 6 年前

    简而言之,我想为用户看到的屏幕截图,而不是我的活动。假设我的应用程序被最小化,截图是为屏幕本身拍摄的,而不是为我的应用程序拍摄的。

    我在某个地方提到,自API 19或4.0 android以来,这在非根设备上是可能的,但我找不到这样做的方法。

    我在互联网上尝试了很多解决方案,但都没有成功。瑞德说了很多,但什么也没发现。

    我找到了这段代码,但它确实为我的应用程序(布局)截图

    以下是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 回复  |  直到 6 年前
        1
  •  0
  •   Kaj    6 年前

    我明白了。在到处搜索了很多之后,我发现有一个来自java的新类可以为您完成这项工作。这是媒体投影。会有用的 Android棒棒糖5.0或更高版本,不需要根 play store中的所有应用程序都在使用它,因为我试图下载许多应用程序来获取截图背后的想法。

    以下是关于它的文档:

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