选择具有自定义扩展名的文件时运行我的应用程序(并执行某些操作)

Posted

技术标签:

【中文标题】选择具有自定义扩展名的文件时运行我的应用程序(并执行某些操作)【英文标题】:Run my app when a file with custom extension is selected (and do something) 【发布时间】:2021-12-31 01:02:54 【问题描述】:

我正在尝试使用 mvvm 在 Xamarin 中编写我的第一个跨平台应用程序。 该应用记录用户插入的项目(付款)并执行一些操作(预置和其他数学运算)。

我编写了添加/更新/删除/显示项目的代码,当添加项目时,应用程序会保存项目,并写入一个包含有关项目的所有信息的自定义扩展名 (*.dinero) 的文件,因此异步应用程序在开始时加载所有文件。

我嵌入了一个通过电子邮件发送这些文件的功能,以允许其他用户将相同的项目添加到其项目列表中。

我的问题是如何将自定义文件扩展名关联到我的应用程序以及如何实现打开“newItempage”以允许用户将项目保存到其文件的过程?

我找到了问题Associate file extension with Xamarin android application,但我不明白如何使用它(我必须编写答案中报告的代码)。

【问题讨论】:

搜索“Xamarin IntentFilter”,这里和其他地方有多个帖子,更详细 我搜索了意图过滤器,但我没有找到任何只适用于该死字符串 [intentfilter ...但没有像教程... 您能告诉我您在使用 IntentFilter 时遇到的问题吗? 【参考方案1】:

我回答我的问题是为了让别人的生活变得简单一些。 要将文件与允许在“点击具有自定义扩展名的文件”事件发生时启动应用程序的应用程序相关联,我们必须在类声明上方添加MainActivity.cs

 [IntentFilter(new[]  Android.Content.Intent.ActionView , 
Categories = new[]  Android.Content.Intent.CategoryDefault , 
DataMimeType = "application/*", DataPathPattern = "*.Dinero")]

所以在OnCreate方法中我们必须添加if语句来处理intent数据:

if ( Intent.Action== Android.Content.Intent.ActionView)

      string filecontent = GetFileContent(Intent);

在我的情况下,我会阅读 Dinero 文件。 Intent 数据不包含文件路径,而是包含 URI,因此要读取文件内容,我们需要调用 ContentResolver 以创建流并最终读取文件内容:

string GetFileContent(Android.Content.Intent Intent)
        
            Android.Net.Uri uridata = Intent.Data;
            StreamReader streamread = new StreamReader(ContentResolver.OpenInputStream(uridata));
            string content = streamread.ReadToEnd();
            return content;
        

【讨论】:

以上是关于选择具有自定义扩展名的文件时运行我的应用程序(并执行某些操作)的主要内容,如果未能解决你的问题,请参考以下文章

Android 存储访问框架 - 自定义文件类型的启动选择器

保存具有自定义扩展名的文件

使用具有自定义扩展名的 SDF 文件(SQLCE 数据库)作为我的 WPF 应用程序的数据文件类型

如何检查我的ios8自定义键盘扩展是否具有开放访问权限?

如何在文档目录中创建具有自定义扩展名的文件?

Richfilemanager 列出具有自定义扩展名的文件