在Android API28之前,当请求媒体投影服务时,Android仅允许用户通过选中“* 不再显示 *”复选框授予访问权限一次。因此,每次应用想要使用媒体投影服务时,访问权限都已被授予。
在android AP29中,对话框更改,此选项不再存在。
如何才能让用户仅授予一次对应用程序的访问权限以使用媒体投影?谢谢。
5t7ly7z51#
问题是我打电话给
startActivityForResult(mProjectionManager.createScreenCaptureIntent(), REQUEST_CODE);
每次,这是不必要的(createScreenCaptureIntent()导致对话框窗口,请求用户交互)我的解决方案使对话框只出现一次(如果应用程序关闭,它将再次请求权限一次).所有我必须做的是使类型Intent和int的额外的私有静态变量.
private static Intent staticIntentData; private static int staticResultCode;
在“活动结果”上,我使用传递的结果代码和Intent赋值这些变量:
if(staticResultCode == 0 && staticIntentData == null) { sMediaProjection = mProjectionManager.getMediaProjection(resultCode, data); staticIntentData = data; staticResultCode = resultCode; } else { sMediaProjection = mProjectionManager.getMediaProjection(staticResultCode, staticIntentData)}; }
每次调用startprojection方法时,我都会检查它们是否为空:
if(staticIntentData == null) startActivityForResult(mProjectionManager.createScreenCaptureIntent(), REQUEST_CODE); else captureScreen();
如果为null,它将请求权限,如果不是,它将使用静态intent数据和静态int resultcode启动投影,因此无需再次请求该权限,只需重用您在Activity result中获得的内容。
sMediaProjection = mProjectionManager.getMediaProjection(staticResultCode, staticIntentData);
就这么简单!现在它只会显示一个单一的时间,每次你使用应用程序。我猜这就是谷歌想要的,因为没有保持决定复选框在该对话框像以前的Android版本
x6yk4ghg2#
当应用程序重新启动或手机重新启动时,静态会丢失。这不是很好的解决方案
2条答案
按热度按时间5t7ly7z51#
问题是我打电话给
每次,这是不必要的(createScreenCaptureIntent()导致对话框窗口,请求用户交互)我的解决方案使对话框只出现一次(如果应用程序关闭,它将再次请求权限一次).所有我必须做的是使类型Intent和int的额外的私有静态变量.
在“活动结果”上,我使用传递的结果代码和Intent赋值这些变量:
每次调用startprojection方法时,我都会检查它们是否为空:
如果为null,它将请求权限,如果不是,它将使用静态intent数据和静态int resultcode启动投影,因此无需再次请求该权限,只需重用您在Activity result中获得的内容。
就这么简单!现在它只会显示一个单一的时间,每次你使用应用程序。我猜这就是谷歌想要的,因为没有保持决定复选框在该对话框像以前的Android版本
x6yk4ghg2#
当应用程序重新启动或手机重新启动时,静态会丢失。这不是很好的解决方案