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