如何设置存储访问框架(SAF)系统选择器的屏幕方向 实现默认横屏启动
SAF系统选择器横屏启动解决方案
SAF是运行在系统进程的独立组件,默认不支持调用方直接指定启动方向,你之前尝试通过ActivityLifecycleCallbacks修改方向失败的原因是:应用内的生命周期回调只能监听自身进程的Activity,无法触达系统进程的SAF组件。以下是两个可落地的实现方案:
方案1:临时修改系统自动旋转配置(全版本兼容)
需要申请android.permission.WRITE_SETTINGS特殊权限,实现步骤:
- 调用SAF前,先读取
Settings.System.ACCELEROMETER_ROTATION的当前值,保存原始自动旋转状态 - 临时开启自动旋转,同时保持你的调用Activity固定为横屏
- 启动SAF选择器,此时组件会自动适配当前横屏状态,不会触发横竖屏切换动画
- 接收到SAF返回结果后,立即将自动旋转配置恢复为之前保存的原始值
注意:WRITE_SETTINGS属于特殊权限,无法通过普通运行时权限申请,需要引导用户跳转到系统设置页面手动开启。
方案2:自研匹配需求的轻量选择器(无系统权限要求)
因为你只需要筛选自定义的.cta格式文件,可以完全避开SAF系统选择器的限制:
- 直接通过MediaStore API扫描共享存储下所有
.cta后缀的文件 - 自行实现文件列表展示、选择交互,完全自定义界面方向、筛选规则,不受SAF的任何约束
- Android 13及以上只需要申请对应文件类型的读取权限即可,无需申请全量存储权限
额外补充:如果你的应用只需要访问自有目录下的
.cta文件,不需要访问其他应用的共享存储,可以完全不需要使用SAF,直接通过文件路径读写自有目录的文件即可。
内容的提问来源于stack exchange,提问作者Jenix
相关产品推荐
相关产品推荐

