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
相关产品推荐
相关产品推荐

