如何在Delphi开发的Android(三星)应用中使用OpenDialog加载播放列表?
针对三星手机上OpenDialog.execute无法执行的解决方案
Hey Johnny, 我之前开发音频类应用时也在三星设备上踩过类似的文件选择坑,给你几个实测有效的解决思路:
适配Android权限与存储机制
三星在Android 10及以上版本的Scoped Storage管控格外严格,传统的OpenDialog.execute可能没适配这套新机制。你需要确认:- 已在Manifest中声明
READ_EXTERNAL_STORAGE(Android 12及以下)或READ_MEDIA_AUDIO(Android 13+)权限 - 动态申请权限时,引导用户授予文件访问权限
- 尽量通过MediaStore API获取音频文件,而非直接操作文件路径
- 已在Manifest中声明
替换为官方推荐的文件选择Intent
放弃旧的OpenDialog,改用Android系统原生的文件选择Intent,兼容性在三星设备上会好很多:val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply { addCategory(Intent.CATEGORY_OPENABLE) type = "audio/*" // 可选:允许选择多个文件 putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true) } startActivityForResult(intent, REQUEST_PICK_AUDIO_FILES)如果你用的是Jetpack组件,建议用Activity Result API来处理返回结果,比
onActivityResult更可靠。排查三星系统的特殊限制
部分三星机型会通过自带的安全中心限制第三方APP的文件访问,你可以:- 引导用户检查APP的「文件访问权限」是否完全开启
- 测试选择单个音频文件 vs 选择整个文件夹,看是否有差异
- 避免访问三星设备的私有目录(比如某些加密存储区域)
尝试成熟的第三方文件选择库
如果自己适配太耗时,可以用已经做过机型适配的第三方库,比如Material File Picker,这类库已经处理了包括三星在内的各种机型兼容性问题。
如果还有具体的错误日志或者代码片段,贴出来可以帮你更精准地定位问题~
内容的提问来源于stack exchange,提问作者Johnny
相关产品推荐
相关产品推荐

