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

Xamarin Forms Android中如何获取WhatsApp共享文本文件的文件名?

解决WhatsApp共享文件时文件名获取异常的问题

之前通过直接查询URI并截取第一个字段的方式获取文件名,在WhatsApp更新后失效,返回的是类似DOC-20230109-WA0008.的内部标识而非真实文件名。其他应用能正常获取原文件名,说明需要通过系统标准字段来读取。

解决方案:使用OpenableColumns.DISPLAY_NAME获取文件名

系统提供的OpenableColumns类定义了专门用于获取可打开文件显示名称的字段,适配content://类型的URI(WhatsApp共享文件常用此类型),比直接取索引0的字段更可靠。

修改后的代码如下:

using Android.Provider;

string GetIntentFilename(Android.Net.Uri uri)
{
    string filename = string.Empty;
    // 指定要查询的列:仅获取显示名称,提升查询效率
    string[] projection = { OpenableColumns.DISPLAY_NAME };
    
    using (var cursor = ContentResolver.Query(uri, projection, null, null, null))
    {
        if (cursor != null && cursor.MoveToFirst())
        {
            int nameColumnIndex = cursor.GetColumnIndex(OpenableColumns.DISPLAY_NAME);
            filename = cursor.GetString(nameColumnIndex);
        }
    }

    return filename.Trim();
}

补充说明

  • 原方法失效原因:直接取cursor索引0的字段,该字段内容是WhatsApp内部的文件标识,并非用户可见的真实文件名。
  • 兼容性:OpenableColumns适用于所有支持ContentResolver访问的URI,不仅限于WhatsApp,适配性更广。
  • 权限:通过共享Intent传递的URI,无需额外申请外部存储权限,系统已授权当前应用访问该文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:15:52