Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/209.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin Android如何正确声明意图过滤器以匹配自定义文件类型?_Android_Xamarin_Intentfilter - Fatal编程技术网

Xamarin Android如何正确声明意图过滤器以匹配自定义文件类型?

Xamarin Android如何正确声明意图过滤器以匹配自定义文件类型?,android,xamarin,intentfilter,Android,Xamarin,Intentfilter,我目前正在开发一个应用程序,其功能应包括我的应用程序所连接的自定义文件扩展名。我基本上想要的是,当我在Android文件系统中单击自定义文件时,我的应用程序会自动启动并读取文件内容。为了实现这一点,我尝试实现一个意图过滤器,但我就是无法让它工作 我的IntentFilter的外观: [IntentFilter(new[] { Intent.ActionView }, Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrows

我目前正在开发一个应用程序,其功能应包括我的应用程序所连接的自定义文件扩展名。我基本上想要的是,当我在Android文件系统中单击自定义文件时,我的应用程序会自动启动并读取文件内容。为了实现这一点,我尝试实现一个意图过滤器,但我就是无法让它工作

我的IntentFilter的外观:

[IntentFilter(new[] { Intent.ActionView }, Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable }, DataMimeType ="*/*" ,DataSchemes = new[] { "file","content" }, DataPathPattern = ".*\\.cm")]
我的问题是,这个过滤器可以识别
.cm
文件,但也可以识别不是我想要的任何其他文件。我尝试了许多不同的解决方案,它们不匹配每种文件类型,但也不匹配
.cm
类型的文件。此外,我还了解到必须指定
DataHost
,否则将忽略
DataPathPattern
,但当我在声明中也包含
DataHost
时,就没有任何效果了


任何帮助都将不胜感激,谢谢

您是否希望达到如下结果?

如果是,请更改您的
IntentFilter
,如以下格式所示

    [IntentFilter(new[] { Android.Content.Intent.ActionView, Android.Content.Intent.ActionEdit }, Categories = new[] { Android.Content.Intent.CategoryDefault }, DataMimeType = "application/octet-stream", DataHost = "*", DataPathPattern = ".*\\.cm")]


你可以谷歌:注册你的安卓应用程序的文件类型和电子邮件附件,这是一篇关于它的有用文章

你可以使用
StartActivityForResult(intent,PICK\u DIR\u REQUEST\u code)
启动意图,然后判断意图过滤器是否与OnActivityResult中的自定义文件匹配,使用
if(requestCode==PICK\u DIR\u REQUEST\u code&&resultCode==Result.Ok)
@LeonLu MSFT感谢您的回答。因为我对Xamarin和Android非常陌生,所以我读了一些关于StartActivityForResult的文章,但我不认为这对我有什么帮助。我编辑了我的问题,因为它可能不太清楚我想要实现什么,但基本上我希望我的应用程序在用户与交互(例如在文件浏览器中)时处理文件类型。我发布了一个答案,请查看。如果回答有帮助,请接受它作为答案(单击“✔” 在这个答案的左上角),它将帮助其他有类似问题的人Kay,我看到过滤器在你的模拟器上工作,但当我在我的物理测试设备(Android 6.0上的三星SM-J500FN)上尝试时,我仍然得到“无应用程序”消息。顺便说一下,
.cm
文件是在本机文件浏览器中打开的。你能用其他设备或模拟器试试吗,不要用三星设备进行测试。我试过一个模拟器,也试过另一个运行Android 5.1的物理设备,两者都非常有趣地接受你对过滤器的声明。唯一的问题是我的m通过
GetParcelableExtra(Intent.ExtraStream)获取文件内容的方法由于Android.Net.Uri
在这些设备上不再工作,但我想这本身就是另一个话题。我确实想知道,如果是三星或安卓6.0的产品,完美匹配的IntentFilter似乎是不可能的。无论如何,你为我指出了正确的方向,并提供了一个工作过滤器。我真的非常感谢你!