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

