gpt4 book ai didi

android - 防止 MediaProjection 对象在终止应用程序时丢失

转载 作者:行者123 更新时间:2023-11-30 01:24:16 32 4
gpt4 key购买 nike

我正在使用 MediaProjection 截取屏幕截图。这就是我正在做的。我使用服务创建了一个覆盖图标。单击覆盖图标会截取屏幕截图。问题是,无论何时通过按后退按钮终止应用程序或通过滑动它手动丢失 MediaProjection 对象。有没有办法维护 MediaProjection 并避免在每次应用程序被终止时请求 MediaProjection。我已经看过this但我还是做不到。

在我的 Mainactivity 中,Onclick 包含 startActivityForResult,结果 onActivityResult 如下:

 @Override
protected void onActivityResult(final int requestCode,final int resultCode,final Intent data)
{
if (requestCode == requestcode)
{
if (resultCode == RESULT_OK)
{
Singelton.setScreenshotPermission((Intent) data.clone());
Singelton.putmanger(mediaProjectionManager);

}else if (resultCode==RESULT_CANCELED) {
Singelton.setScreenshotPermission(null);
}
}
}

Singelton类如下:

protected static void setScreenshotPermission(final Intent permissionIntent)
{
screenshotPermission = permissionIntent;
//screenshotPermission becomes null once the application is killed
}

public static MediaProjection getData()
{
return (mediaProjection);
}

public static void getScreenshotPermission()
{
if (screenshotPermission != null)
{
Log.d("screenshotpermisson", "screenshotPermission != null ");
if(mediaProjection!=null)
{
Log.d("mediaprojection", "mediaprojection != null ");
mediaProjection.stop();
mediaProjection = null;
}
mediaProjection = mediaProjectionManager.getMediaProjection(Activity.RESULT_OK, (Intent) screenshotPermission.clone());
}
else
{
//Here I need to request for media projection again without starting activity
}

}

我的覆盖图标服务类按如下方式处理点击:

 public void createDisplay()
{
if (mediaProjection == null)
{
Singelton.getScreenshotPermission();
mediaProjection = Singelton.getData();
}

mImageReader = ImageReader.newInstance(width, height, PixelFormat.RGBA_8888, 1);
vd = mediaProjection.createVirtualDisplay("screen-mirror", width, height, mDensity, DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR, mImageReader.getSurface(), null, null);
mImageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener(){..}
}

我是 android 的新手,很难弄清楚这一点。我们将不胜感激。

最佳答案

只需按照 fadden 在他的评论中暗示的那样重新创建媒体投影。由于每次您的服务被终止时,相关的叠加层也会随之终止,因此您必须在重新启动服务时重新创建媒体投影。

通过不使用原始 Intent 而是使用此处回答的克隆,您已经做得很好了 https://stackoverflow.com/a/33892817/3918978 .

但是,如果权限或 MediaProjection 不再有效,只需获取一个新的权限(开始一个要求它的 Activity )。

关于android - 防止 MediaProjection 对象在终止应用程序时丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36653281/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com