android API级别29 - MediaProjection始终请求权限

knsnq2tg  于 2023-03-11  发布在  Android
关注(0)|答案(2)|浏览(687)

在Android API28之前,当请求媒体投影服务时,Android仅允许用户通过选中“* 不再显示 *”复选框授予访问权限一次。因此,每次应用想要使用媒体投影服务时,访问权限都已被授予。

在android AP29中,对话框更改,此选项不再存在。

如何才能让用户仅授予一次对应用程序的访问权限以使用媒体投影?谢谢。

5t7ly7z5

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版本

x6yk4ghg

x6yk4ghg2#

当应用程序重新启动或手机重新启动时,静态会丢失。这不是很好的解决方案

相关问题