You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安卓系统下.srt文件对应MIME类型设置及文件筛选问题咨询

安卓筛选SRT字幕文件解决方案

问题根因

SRT格式没有IANA官方注册的标准MIME类型,因此大部分安卓系统自带的文件管理器不会把.srt后缀的文件映射到text/srt,直接设置该MIME类型自然识别不到文件;用text/plain又会匹配所有纯文本文件,无法精准过滤。

可行实现方案

方案1:适配Android 4.4+ 官方推荐的ACTION_OPEN_DOCUMENT选择器

分两步实现100%精准筛选:

  1. 配置Intent参数,尽可能收窄文件匹配范围
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
// 基础过滤:仅匹配文本类文件
intent.setType("text/*");
// 追加主流ROM识别的SRT相关MIME类型,覆盖更多映射规则
intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[]{"text/plain", "text/srt", "application/x-subrip", "application/srt"});
// 限制仅选单个文件
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, false);
startActivityForResult(intent, REQUEST_CODE_PICK_SRT);
  1. 选文件回调时追加后缀强校验,兜底过滤不符合要求的文件
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK && requestCode == REQUEST_CODE_PICK_SRT && data != null) {
        Uri selectedUri = data.getData();
        if (selectedUri != null) {
            String fileName = getFileNameFromUri(selectedUri);
            // 统一转小写判断,避免大小写后缀漏判
            if (fileName != null && fileName.toLowerCase().endsWith(".srt")) {
                // 符合要求,处理SRT文件逻辑
            } else {
                // 提示用户请选择后缀为.srt的字幕文件
            }
        }
    }
}

// 从Uri中获取文件名的工具方法
private String getFileNameFromUri(Uri uri) {
    String fileName = null;
    Cursor cursor = getContentResolver().query(uri, null, null, null, null);
    if (cursor != null && cursor.moveToFirst()) {
        int nameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
        fileName = cursor.getString(nameIndex);
        cursor.close();
    }
    return fileName;
}

方案2:适配老版本ACTION_GET_CONTENT选择器

Intent配置调整如下,其余后缀校验逻辑和方案1完全一致:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("text/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.putExtra(Intent.EXTRA_MIME_TYPES, new String[]{"text/plain", "text/srt", "application/x-subrip", "application/srt"});
startActivityForResult(intent, REQUEST_CODE_PICK_SRT);

注意事项

如果需要覆盖更多小众ROM的MIME映射规则,可以自行在EXTRA_MIME_TYPES数组中追加对应的自定义MIME类型,后缀强校验是必须步骤,可以保证所有场景下都能精准过滤SRT文件。

内容的提问来源于stack exchange,提问作者user16566034

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 22:39:00