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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:26:08