【问题标题】:Using CFBundleDocumentTypes: why does my app not show up in the "Share" menu?使用 CFBundleDocumentTypes:为什么我的应用程序没有出现在“共享”菜单中?
【发布时间】:2014-02-21 14:56:19
【问题描述】:

我正在尝试为所有可能的文件类型注册我的应用程序。我在 info.plist 中添加了以下内容:

<key>CFBundleDocumentTypes</key>
<array>
    <dict>
        <key>CFBundleTypeName</key>
        <string>public.data</string>
        <key>LSItemContentTypes</key>
        <array>
            <string>public.data</string>
            <string>public.content</string>
        </array>
    </dict>
</array>

如果我现在在 Safari 中打开 PDF 并点击 Safari 的“共享”按钮,我的应用程序不会被提供。但是,如果我点击 PDF 本身,顶部会出现一个“打开方式”按钮,并且会列出我的应用程序。

这不是一个真正的问题,但它会阻止用户将照片导入我的应用程序,因为照片应用程序中没有“打开方式”菜单。

我也可以注册“分享”菜单吗?

【问题讨论】:

  • 你能给我提供同样的例子吗?我正在寻找相同的解决方案

标签: ios objective-c xamarin.ios


【解决方案1】:

很遗憾,这是不可能的,因为:

Safari 中的共享屏幕使用UIActivityViewController 来显示可以通过该页面执行的许多活动。这些活动在UIActivity.h 中定义,通常是系统定义的活动,例如发布到 Facebook发布到 Twitter消息、打印等

要让非系统定义的活动出现在该屏幕中,必须创建一个自定义的UIActivity 子类,然后用这些数组初始化UIActivityViewController

另一方面,“打开方式...”屏幕看起来很相似,但使用的是 UIDocumentInteractionController,它显示可以打开给定 URL/UTI 的应用程序(不要使用 Google UTI...)

【讨论】:

  • 但情况恰恰相反。我想要什么:Safari 的“分享”菜单中的我的应用程序。
  • 这是不可能的,因为 UIActivityViewController 不显示应用程序,只显示系统提供的服务。
  • 为了让您的应用程序出现在该共享屏幕中,Safari 工程师必须创建一个自定义 UIActivity 类,当点击该类时,它将启动您的应用程序。
  • 如果你更新你的答案,说明不可能,我可以接受。
  • 好的,我在这个答案的开头添加了一个声明:-)
猜你喜欢
  • 1970-01-01
  • 2019-12-03
  • 2018-01-12
  • 1970-01-01
  • 2020-02-29
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 2013-06-19
相关资源
最近更新 更多