c# - Android Xamarin 上的屏幕截图,宽系统屏幕截图
问题描述
简而言之,我的问题是,我想为用户看到的屏幕截屏,而不是我的 Activity。假设我的应用程序已最小化,屏幕截图是为屏幕本身拍摄的,而不是为我的应用程序拍摄的。
我在某处发红说,自 API 19 或 4.0 android 以来,它可能在非 root 设备上,但我找不到这样做的方法。
我在互联网上尝试了许多解决方案,但没有任何效果。红了很多,但什么也没找到。
我找到了这段代码,但确定它为我的应用程序(布局)截取了屏幕截图
这是 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);
}
但正如我所说:它为布局截屏,而不是真实屏幕。
我试图隐藏或最小化该应用程序,但什么也没发生。
解决方案
我知道了。在到处搜索之后,我发现有一个来自 java 的新类可以为你完成这项工作。这是媒体投影。它可以在Android Lollipop 5.0 或更高版本上运行,并且不需要 root 和 Play 商店中的所有应用程序都使用它,因为我尝试下载许多应用程序以获得截图背后的想法。
这是有关它的文档:
https://developer.android.com/reference/android/media/projection/MediaProjection
推荐阅读
- java - 自定义哈希图中的哈希函数
- javascript - 在循环中添加“#items”
- scala - 为什么unapplySeq在模式匹配中涉及case类或元组
- kubernetes - 我在哪个实例中,是大师,然后是哪个大师?
- javascript - 参数变化调用函数React js react-map-gl
- php - 带有 SQL 行详细信息的 PHP 邮件
- django - 为了过滤 url 中的查询参数以在 Django Rest Framework 中工作,我缺少什么?
- android - 当你点击 android app 时,android framework 中哪个类最先被盯着
- python - 在 Python 中,对于 POST 请求,是否可以从 POST 请求对象中获取用于请求的 IP 地址?
- javascript - 无法使用引导程序 4 和 jquery 在多项目轮播中显示 3 张幻灯片