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

使用C#和Xamarin在Android上选择并加载文件的问题咨询

解决文件选择后读取内容的问题

你当前的代码仅实现了唤起文件选择器的逻辑,但缺少选择完成后的回调处理,所以选中文件后只会返回应用却无后续操作。要完成文件读取并加载到控件,需要重写OnActivityResult方法来处理返回的文件Uri,再读取内容。

步骤1:重写OnActivityResult回调方法

当用户选中文件后,系统会回调这个方法,你需要在这里处理返回的文件信息:

protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);

    // 匹配之前启动选择器时用的请求码1,且操作成功
    if (requestCode == 1 && resultCode == Result.Ok && data != null)
    {
        // 获取选中文件的Uri
        Android.Net.Uri fileUri = data.Data;
        if (fileUri != null)
        {
            // 读取文件内容
            string fileContent = ReadFileContent(fileUri);
            // 将内容加载到你的控件(替换成你实际的可存储读取数据的控件)
            YourDataControl.SetContent(fileContent);
        }
    }
}

步骤2:实现文件内容读取方法

通过ContentResolver根据Uri读取文本文件内容:

private string ReadFileContent(Android.Net.Uri uri)
{
    string content = "";
    try
    {
        using (StreamReader reader = new StreamReader(ContentResolver.OpenInputStream(uri)))
        {
            content = reader.ReadToEnd();
        }
    }
    catch (Exception ex)
    {
        // 可添加异常处理,比如提示用户读取失败
        Console.WriteLine($"读取文件出错: {ex.Message}");
    }
    return content;
}

完整代码示例

把唤起选择器的代码和上述逻辑结合:

// 唤起文件选择器的方法
private void OpenFilePicker()
{
    Intent intent = new Intent(Intent.ActionGetContent);
    intent.SetType("text/plain");                
    StartActivityForResult(Intent.CreateChooser(intent, "Select file"), 1);
}

// 处理选择结果的回调
protected override void OnActivityResult(int requestCode, Result resultCode, Intent data)
{
    base.OnActivityResult(requestCode, resultCode, data);

    if (requestCode == 1 && resultCode == Result.Ok && data != null)
    {
        Android.Net.Uri fileUri = data.Data;
        if (fileUri != null)
        {
            string fileContent = ReadFileContent(fileUri);
            // 替换为你自己控件的内容设置逻辑
            YourDataControl.SetContent(fileContent);
        }
    }
}

// 读取文件内容的工具方法
private string ReadFileContent(Android.Net.Uri uri)
{
    string content = "";
    try
    {
        using (StreamReader reader = new StreamReader(ContentResolver.OpenInputStream(uri)))
        {
            content = reader.ReadToEnd();
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine($"读取文件出错: {ex.Message}");
    }
    return content;
}

注意事项

  • 根据你现有控件的实际接口调整内容赋值逻辑,比如控件是TextView就直接用YourTextView.Text = fileContent
  • Android 10及以上版本中,通过ActionGetContent获取Uri的方式无需额外申请文件读写权限,系统会通过ContentResolver授权访问

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 09:27:19