Короче, моя проблема, я хочу сделать скриншот для экрана, который видит пользователь, а не для моей Активности. Допустим, мое приложение свернуто, снимок экрана сделан для самого экрана, а не для моего приложения.
Я где-то заметил, что это возможно на некорневых устройствах, начиная с 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);
}
но Как я уже сказал: для макета требуется скриншот, а не реальный экран.
Я пытался скрыть или свернуть приложение, но ничего не произошло.