如何让Delphi 12.1开发的Android和iOS应用关联.PGN文件以实现下载后自动打开
如何让Delphi 12.1开发的Android和iOS应用关联.PGN文件以实现下载后自动打开
你好!我刚好做过类似的文件关联配置,Delphi 12.1对Android和iOS的文件关联都有直接的项目选项支持,下面分平台给你一步步说怎么做:
Android平台配置步骤
- 打开你的Delphi项目,依次点击顶部菜单
Project>Options,在左侧面板找到Application>Manifest(或者直接定位到Android分类下的Manifest选项) - 我们需要添加Intent过滤器来响应PGN文件的打开请求:
- 点击
Add Intent Filter按钮,创建一个新的过滤器 - 在
Actions列表中添加android.intent.action.VIEW—— 这个动作表示应用要处理“查看”文件的请求 - 在
Categories列表中添加两个值:android.intent.category.DEFAULT和android.intent.category.BROWSABLE—— 前者让应用成为系统默认候选之一,后者允许从浏览器、下载器等场景唤起应用 - 切换到
Data标签页,配置文件匹配规则:- 设置
MIME Type为application/x-chess-pgn(这是PGN文件的标准MIME类型,如果后续测试不生效,可以试试text/plain,因为PGN本质是纯文本格式) - 在
Scheme里同时添加content和file—— 覆盖本地存储、下载目录等不同来源的文件请求 - 在
Path Patterns中添加*.pgn,确保只匹配PGN扩展名的文件
- 设置
- 点击
- 如果你更习惯直接编辑清单模板文件,可以找到项目目录下的
AndroidManifest.template.xml,在<application>标签内的主<activity>节点中插入这段代码:
<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:mimeType="application/x-chess-pgn" /> <data android:scheme="content" /> <data android:scheme="file" /> <data android:pathPattern=".*\\.pgn" /> </intent-filter>
- 配置完成后,记得点击
Project>Clean清理缓存,再重新编译部署到Android设备。之后下载PGN文件时,系统就会把你的应用列在可打开的应用列表里了
iOS平台配置步骤
iOS的文件关联需要通过Info.plist配置自定义UTI(统一类型标识符)和文档类型,Delphi 12.1支持可视化配置,也可以直接编辑plist文件:
- 打开项目选项:
Project>Options,左侧面板找到Version Info>iOS Info.plist - 首先添加自定义UTI(因为PGN不是系统默认识别的文件类型):
- 点击
Add按钮,选择Imported UTIs类型 - 为这个UTI填写以下属性:
UTTypeIdentifier:填一个唯一的反向域名格式标识符,比如com.yourcompany.yourapp.pgn(避免和其他应用的UTI冲突)UTTypeDescription:比如Chess PGN File(这个描述会显示在系统的“打开方式”菜单里)UTTypeConformsTo:选择public.text(PGN是纯文本格式,继承这个系统UTI能获得更好的兼容性)UTTypeTagSpecification:展开后添加两个子属性:public.filename-extension:填pgnpublic.mime-type:填application/x-chess-pgn
- 点击
- 接下来添加文档类型,让系统知道你的应用能处理这个UTI:
- 点击
Add按钮,选择Document Types类型 - 填写以下属性:
CFBundleTypeName:同样填Chess PGN FileLSHandlerRank:选择Default或者Alternate(Default表示优先候选,Alternate作为备选)LSItemContentTypes:添加刚才自定义的UTI(比如com.yourcompany.yourapp.pgn)
- 点击
- 如果你直接编辑Info.plist文件,可以在
<dict>节点内插入这段配置:
<key>UTImportedTypeDeclarations</key> <array> <dict> <key>UTTypeIdentifier</key> <string>com.yourcompany.yourapp.pgn</string> <key>UTTypeDescription</key> <string>Chess PGN File</string> <key>UTTypeConformsTo</key> <array> <string>public.text</string> </array> <key>UTTypeTagSpecification</key> <dict> <key>public.filename-extension</key> <array> <string>pgn</string> </array> <key>public.mime-type</key> <string>application/x-chess-pgn</string> </dict> </dict> </array> <key>CFBundleDocumentTypes</key> <array> <dict> <key>CFBundleTypeName</key> <string>Chess PGN File</string> <key>LSHandlerRank</key> <string>Default</string> <key>LSItemContentTypes</key> <array> <string>com.yourcompany.yourapp.pgn</string> </array> </dict> </array>
- 清理项目缓存后编译部署到iOS设备,之后下载PGN文件时,在文件应用或下载管理器里选择“打开方式”,你的应用就会出现在可选列表中了
额外注意事项
- 不管是Android还是iOS,配置完成后一定要执行
Project>Clean清理缓存,避免旧配置残留导致不生效 - 测试时尽量用真实设备,模拟器对文件关联的兼容性不如实体设备稳定
- 如果你需要在应用内读取打开的PGN文件内容:
- Android可以在
OnCreate或OnNewIntent方法中通过Intent获取文件URI,再通过内容解析器读取文件 - iOS可以在
Application:openURL:options:或Application:openURL:sourceApplication:annotation:方法中处理文件URL,然后读取内容
- Android可以在
备注:内容来源于stack exchange,提问作者Mike at Bookup
相关产品推荐
相关产品推荐

