Xamarin Forms (Android) - 将应用与自定义文件类型关联

问题描述

我希望将文件扩展名“.etd”与 Android 关联,以便具有此扩展名的文件在点击时打开应用程序。

我浏览了整个互联网,有很多代码组合要实现,但除非我使用诸如“.txt”之类的通用文件类型,否则绝对没有任何效果

当我使用 .txt 文件时,“打开方式...”菜单将在 MainActivity.cs 中显示以下 IntentFilter 声明:

[IntentFilter(new[] { Intent.ActionView },Categories = new[] { Intent.CategoryDefault },DataMimeType = @"text/plain")]

但是,下面的代码以及大量的排列和变体并没有做任何事情(尝试打开 .etd 文件会出现“无法打开文件错误):

[IntentFilter(new string[] { Intent.ActionView },Categories = new string[] { Intent.CategoryDefault,Intent.Categorybrowsable },DataScheme = "file",DataHost = "*",DataMimeType = "*/*",DataPathPattern = ".*\\\\.etd")]

此外,如果我最终使文件关联正常工作,我找不到任何说明该怎么做,即如何访问文件并使用它。 编辑:我现在已经完成了最后一点(通过将我的文件重命名为 .tsv 并使用“text/tab-separated-values”作为 DataMimeType),所以现在我只需要知道如何关联 .etd文件与我的应用程序。

解决方法

.etd 文件扩展名没有匹配的 DataMimeType。因此我们无法将文件扩展名“.etd”与 Android 相关联。

类型太多,无法全部上传。欲知更多详情,请查看链接。 https://github.com/khellang/MimeTypes/blob/master/src/MimeTypes/MimeTypes.cs.pp

以下是 e 部分和 t 部分的类型供您参考。

static MimeTypes()
    {
        s_fallbackMimeType = DefaultFallbackMimeType;

        s_typeMap = new Dictionary<string,string>(StringComparer.OrdinalIgnoreCase)
        {
           
            { "ear","application/java-archive" },{ "ecma","application/ecmascript" },{ "edm","application/vnd.novadigm.edm" },{ "edx","application/vnd.novadigm.edx" },{ "efif","application/vnd.picsel" },{ "ei6","application/vnd.pg.osasli" },{ "elc","application/octet-stream" },{ "emf","application/x-msmetafile" },{ "eml","message/rfc822" },{ "emma","application/emma+xml" },{ "emz",{ "eol","audio/vnd.digital-winds" },{ "eot","application/vnd.ms-fontobject" },{ "eps","application/postscript" },{ "epub","application/epub+zip" },{ "es",{ "es3","application/vnd.eszigno3+xml" },{ "esa","application/vnd.osgi.subsystem" },{ "esf","application/vnd.epson.esf" },{ "et3",{ "etx","text/x-setext" },{ "eva","application/x-eva" },{ "evy","application/x-envoy" },{ "exe",{ "exi","application/exi" },{ "exr","image/aces" },{ "ext","application/vnd.novadigm.ext" },{ "ez","application/andrew-inset" },{ "ez2","application/vnd.ezpix-album" },{ "ez3","application/vnd.ezpix-package" },{ "t","text/troff" },{ "t3","application/x-t3vm-image" },{ "t38","image/t38" },{ "taglet","application/vnd.mynfc" },{ "tao","application/vnd.tao.intent-module-archive" },{ "tap","image/vnd.tencent.tap" },{ "tar","application/x-tar" },{ "tcap","application/vnd.3gpp2.tcap" },{ "tcl","application/x-tcl" },{ "td","application/urc-targetdesc+xml" },{ "teacher","application/vnd.smart.teacher" },{ "tei","application/tei+xml" },{ "tex","application/x-tex" },{ "texi","application/x-texinfo" },{ "texinfo",{ "text","text/plain" },{ "tfi","application/thraud+xml" },{ "tfm","application/x-tex-tfm" },{ "tfx","image/tiff-fx" },{ "tga","image/x-tga" },{ "thmx","application/vnd.ms-officetheme" },{ "tif","image/tiff" },{ "tiff",{ "tk",{ "tmo","application/vnd.tmobile-livetv" },{ "toml","application/toml" },{ "torrent","application/x-bittorrent" },{ "tpl","application/vnd.groove-tool-template" },{ "tpt","application/vnd.trid.tpt" },{ "tr",{ "tra","application/vnd.trueapp" },{ "trm","application/x-msterminal" },{ "ts","video/mp2t" },{ "tsd","application/timestamped-data" },{ "tsv","text/tab-separated-values" },{ "ttc","font/collection" },{ "ttf","font/ttf" },{ "ttl","text/turtle" },{ "ttml","application/ttml+xml" },{ "twd","application/vnd.simtech-mindmapper" },{ "twds",{ "txd","application/vnd.genomatix.tuxedo" },{ "txf","application/vnd.mobius.txf" },{ "txt",};
    }