如何在 iOS 14 中使用 PHAuthorizationStatusLimited

2023-11-24

为了获取照片的创建日期,因此在显示 PHPickerViewController 之前使用 requestAuthorizationForAccessLevel。

    PHAccessLevel level = PHAccessLevelReadWrite;
    [PHPhotoLibrary requestAuthorizationForAccessLevel:level handler:^(PHAuthorizationStatus status) {
            if (status == PHAuthorizationStatusLimited || status == PHAuthorizationStatusAuthorized) {
                dispatch_async(dispatch_get_main_queue(), ^{
                    PHPickerConfiguration *configuration = [[PHPickerConfiguration alloc] initWithPhotoLibrary:[PHPhotoLibrary sharedPhotoLibrary]];
                    configuration.filter = [PHPickerFilter imagesFilter];
                    configuration.selectionLimit = 1;
                    PHPickerViewController *picker = [[PHPickerViewController alloc] initWithConfiguration:configuration];
                    picker.delegate = self;
                    [self showViewController:picker sender:nil];
                });
            }
    }];

虽然状态为.limited,但iOS 14仍然显示所有图像。

如何使用 PHPickerViewController 获取有限的照片?


iOS 14 中发生了一些变化,让我们一步一步看看

1.如何读取PHPhotoLibrary访问权限状态

Old

let status = PHPhotoLibrary.authorizationStatus()

New

let status = PHPhotoLibrary.authorizationStatus(for: .readWrite)

2.如何申请PHPhotoLibrary访问权限

Old

PHPhotoLibrary.requestAuthorization { status in
 //your code               
 }

New

PHPhotoLibrary.requestAuthorization(for: .readWrite) { status in
      switch status {
          case .limited:
               print("limited access granted")
                
          default:
               print("denied, .restricted ,.authorized")
                
      }
  }

如果用户授予您有限的权限,您有责任显示如下示例代码所示的图库

if status == .limited {
     PHPhotoLibrary.shared().presentLimitedLibraryPicker(from: self)
}

当您呈现LimitedLibraryPicker时,上一会话中选定的图像将已标记为选中,并在屏幕顶​​部显示一条消息-“选择更多照片或取消选择以删除访问权限"

enter image description here

如果用户授予您有限的访问权限,您仍然使用 UIImagePickerController 或像 BSImagePicker 这样的第三方库显示正常的图库,即使您可以选择并导入到您的应用程序中,也会显示包含所有图片的图库,但在 Xcode 12 控制台中它将显示警告如下

Failed to decode image
[ImageManager] Failed to get sandbox extension for url: file///filepath/5003.JPG, error: Error Domain=com.apple.photos.error Code=41008 "Invalid asset uuid for client" UserInfo={NSLocalizedDescription=Invalid asset uuid for client}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 iOS 14 中使用 PHAuthorizationStatusLimited 的相关文章

随机推荐

  • 传递给宏的变量在错误的命名空间中解析?

    The Noir macro defpage给我带来了一点麻烦 我正在尝试构建与此类似的调用 defpage post some url data some stuff 但是 不要使用关键字 post我想使用一个变量 如下所示 def my
  • 存储过程版本控制

    如何管理存储过程的修订 我们在 SQL Server 2005 上有一个 BI 解决方案 包含数百个存储过程 将这些内容导入 Subversion 的好方法是什么 您推荐使用哪些工具将存储过程编写为文件 毫无疑问 您可以购买许多现成的产品
  • HTTP 重定向绑定 SAML 请求

    假设执行 SP init SSO 使用 HTTP Redirect Binding 而不是 HTTP POST Binding 并且需要签名的 AuthnRequest 这意味着在 URL 中包含 SAMLRequest Q1 我需要在 U
  • 目录在 github 上显示为灰色文件夹,但不跟踪其内容。为什么?

    我有一个目录 ui kit 它在 github 上显示为灰色文件夹 它不可点击 这是 gitignore的全部内容 Fleetwit docs uploads env prj pui Logs logs log Node node modu
  • R 中“str”报告的第二列是什么?该列中的“atomic”是什么意思?

    Using str survey OM 我的数据框上表明我的所有数值数据都是atomic 如果我使用class survey OM perc OM 它返回numeric 我一直以为第二栏str显示了数据的类别 但看起来并不那么简单 所以我的
  • 如何设置windbg自动下载所有符号?

    一般来说 我对编程和调试很陌生 我花了很多时间离线 没有互联网 并且正在阅读 Windows 调试内部 一书 但时不时地 我发现自己需要一个 pdb 文件 我做了一些挖掘 发现了这个网址 http msdn microsoft com en
  • 跨域 AJAX 预检失败来源检查

    这似乎不起作用 ajax url http localhost 3000 foo json data foo bar headers HTTP X CUSTOMHEADER foobar xhrFields withCredentials
  • 对本地文件系统的 AJAX 请求在 Chrome 中不起作用? [复制]

    这个问题在这里已经有答案了 我正在努力使用 jQuery 从 XML 动态创建 UI 我的 jQuery 在 Firefox 中工作 但在 Chrome 中不起作用 它给了我这个控制台错误 仅协议方案支持跨源请求 http data chr
  • 从网页程序获取所有图像|爪哇

    目前我需要一个给定 URL 的程序 返回网页上所有图像的列表 ie 标志 png 图库1 jpg 测试 gif 在我尝试编写代码之前是否有可用的开源软件 语言应该是java 谢谢 菲利普 只需使用一个简单的 HTML 解析器 like jT
  • 禁用“Owl carousel”中特定元素(项目)的拖动 - jquery

    我使用 OWL Carousel jQuery 插件 http www owlgraphic com owlcarousel 在我的小项目中 我创建了可通过此插件拖动的小脚本 现在我想禁用特定元素 项目 中的拖动 但我不知道该怎么做 HTM
  • 为 maven-processor-plugin 编写注释处理器

    我有兴趣为 maven processor plugin 编写一个注释处理器 我对 Maven 比较陌生 处理器 Java 源代码应该位于项目路径中的哪个位置 例如 src main java 以便正确编译它 但最终不会成为我的工件 JAR
  • sendmsg() 中的辅助数据如何工作?

    sendmsg 允许将辅助数据发送到另一个套接字 我想知道这是如何运作的 辅助数据是否与普通消息一起打包 如果是这样 远程接收套接字如何知道如何解析它 远程接收客户端如何检索这些辅助数据 辅助数据不会在线发送 永远不会 对于 Unix 域套
  • WPF 数据绑定和验证规则最佳实践

    我有一个非常简单的 WPF 应用程序 在其中使用数据绑定来允许编辑一些自定义 CLR 对象 我现在想在用户单击 保存 时进行一些输入验证 然而 我读过的所有 WPF 书籍并没有真正为这个问题投入任何篇幅 我看到您可以创建自定义验证规则 但我
  • 如何将系统环境变量传递给app.yaml?

    是否可以 这是我的app yaml runtime nodejs8 env variables NODE ENV production PORT 8080 API KEY API KEY API KEY 就像一个占位符 当我跑步时API K
  • django 中的多数据库支持

    从一些论坛我了解到Django在较低级别添加了多数据库支持 但尚未添加较高级别的api 谁能告诉我如何在 Django 中实现多个数据库连接 有谁知道 Django 何时将完全 正式支持多个数据库连接 如果您只需要多个连接 您可以执行以下操
  • ValueError:只能比较相同标签的系列对象python

    df df1 loc df1 CUST ACCT KEY df2 CUST ACCT KEY 当我执行上述命令时 出现以下错误 ValueError 只能比较相同标签的系列对象 我究竟做错了什么 两列的 dtypes 均为int64 Pan
  • `go mod tidy` 无法下载私有 GitHub 存储库

    这是回应 not found github com me email protected invalid version git ls remote q origin in tmp gopath pkg mod cache vcs ea2b
  • 浮点误差的确定性有多大?

    我知道浮点计算存在准确性问题 并且有很多问题可以解释原因 我的问题是 如果我运行相同的计算两次 我是否可以始终依赖它产生相同的结果 哪些因素可能会影响这个 计算之间的时间 CPU当前状态 硬件不同 语言 平台 操作系统 太阳耀斑 我有一个简
  • 在 JavaScript 中,在循环内使用 wait 会阻止循环吗?

    采用以下循环 for var i 0 i lt 100 i let result await some slow async function do something with result Does await阻止循环 或者是i继续递增
  • 如何在 iOS 14 中使用 PHAuthorizationStatusLimited

    为了获取照片的创建日期 因此在显示 PHPickerViewController 之前使用 requestAuthorizationForAccessLevel PHAccessLevel level PHAccessLevelReadWr