【问题标题】:API Level 29 - MediaProjection is always requesting permissionAPI 级别 29 - MediaProjection 始终请求许可
【发布时间】:2020-03-06 13:22:05
【问题描述】:

直到 Android API28 请求媒体投影服务时,Android 才允许用户通过选中“不再显示”复选框授予访问权限一次。这样每当应用想要使用媒体投影服务时,访问权限就已经被授予了。

在 android AP29 中,对话框发生了变化,该选项不再存在。

可以做些什么来让用户只授予应用程序一次使用媒体投影的访问权限?谢谢。

【问题讨论】:

    标签: android android-mediaprojection


    【解决方案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 版本那样保留决策复选框

    【讨论】:

      猜你喜欢
      • 2020-12-19
      • 2021-08-21
      • 2021-05-29
      • 1970-01-01
      • 2020-11-09
      • 1970-01-01
      • 2023-03-23
      • 1970-01-01
      • 2021-07-20
      相关资源
      最近更新 更多