在请求Media Projection Services之前,直到Android API28为止,Android都通过选中“ 不再显示”复选框允许用户仅授予一次访问权限。这样,每次应用程序都想使用媒体投影服务时,访问权限就已经被授予。
在android AP29中,对话框已更改,此选项不再存在。
要使用户仅向应用程序授予一次使用媒体投影的访问权限,该怎么做?谢谢。
答案 0 :(得分:1)
问题是我在打电话
startActivityForResult(mProjectionManager.createScreenCaptureIntent(), REQUEST_CODE);
每一次都是不必要的(createScreenCaptureIntent()导致请求用户交互的对话框窗口)我的解决方案使对话框仅出现一次(如果关闭了应用程序,它将再次请求许可)。我要做的就是制作Intent和int类型的附加私有静态变量。
private static Intent staticIntentData;
private static int staticResultCode;
在“活动”结果中,我为这些变量分配了传递的结果代码和意图:
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,它将请求权限,否则,将使用静态意图数据和静态int结果代码开始投影,因此不需要再次请求该权限,只需重用活动结果中得到的内容即可。
sMediaProjection = mProjectionManager.getMediaProjection(staticResultCode, staticIntentData);
就这么简单!现在,每次您使用该应用程序时,它只会显示一次。我想这就是Google想要的,因为在该对话框中没有像以前的android版本一样保留决策复选框