Xamarin Android中如何浏览选择文件并在TextView显示选中文件名
在Xamarin Android中实现文件浏览并显示选中文件名
你的点击事件代码已经有了基础框架,接下来只需要补充结果回调处理和文件名解析的逻辑,就能实现把选中文件名显示在TextView里的效果。我一步步给你讲:
1. 完善文件选择的权限处理(重要)
Android 6.0及以上版本需要动态申请读取外部存储的权限,不然可能无法正常访问文件。先修改你的UploadBrowse_Click方法,加上权限检查:
private void UploadBrowse_Click(object sender, EventArgs e) { // 检查读取外部存储权限 if (ContextCompat.CheckSelfPermission(this, Manifest.Permission.ReadExternalStorage) != Permission.Granted) { ActivityCompat.RequestPermissions(this, new string[] { Manifest.Permission.ReadExternalStorage }, 100); return; } _Uploadintent = new Intent(Intent.ActionGetContent); _Uploadintent.SetType("*/*"); // 改为*/*支持所有文件类型,若需限制可换成"image/*"等 _Uploadintent.AddCategory(Intent.CategoryOpenable); StartActivityForResult(Intent.CreateChooser(_Uploadintent, "Select File"), 1); }
然后添加权限请求的回调,处理用户授权或拒绝的情况:
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults) { base.OnRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == 100) { if (grantResults.Length > 0 && grantResults[0] == Permission.Granted) { // 权限通过,重新触发文件选择 UploadBrowse_Click(null, EventArgs.Empty); } else { Toast.MakeText(this, "需要读取存储权限才能选择文件", ToastLength.Short).Show(); } } }
2. 处理文件选择的返回结果
重写OnActivityResult方法,获取选中文件的Uri,然后解析出文件名:
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data) { base.OnActivityResult(requestCode, resultCode, data); // 匹配请求码和结果状态 if (requestCode == 1 && resultCode == Result.Ok && data != null) { var fileUri = data.Data; // 解析文件名 string fileName = GetFileName(fileUri); // 把文件名设置到你的TextView(假设TextView的ID是txtSelectedFile) txtSelectedFile.Text = fileName; } }
3. 实现文件名解析方法
因为不同来源的文件Uri格式不同(比如本地文件、DocumentsProvider提供的文件),需要写一个通用的解析方法:
private string GetFileName(Android.Net.Uri uri) { string fileName = null; // 处理Content类型的Uri(比如从文件管理器选择的文件) if (uri.Scheme == ContentResolver.SchemeContent) { using (var cursor = ContentResolver.Query(uri, null, null, null, null)) { if (cursor != null && cursor.MoveToFirst()) { // 从系统提供的列中获取显示名称 fileName = cursor.GetString(cursor.GetColumnIndex(OpenableColumns.DisplayName)); } } } // 处理File类型的Uri(直接指向本地文件路径) else if (uri.Scheme == ContentResolver.SchemeFile) { fileName = System.IO.Path.GetFileName(uri.Path); } // 若解析失败,返回默认文本 return fileName ?? "未知文件"; }
最后一步:配置Manifest权限
别忘了在AndroidManifest.xml里添加静态权限声明:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
这样操作后,当你点击按钮选择文件,选中的文件名就会显示在指定的TextView里啦~
内容的提问来源于stack exchange,提问作者Swathy
相关产品推荐
相关产品推荐

