我可以在 Android 中创建自定义图像 MIME 类型吗?

Posted

技术标签:

【中文标题】我可以在 Android 中创建自定义图像 MIME 类型吗?【英文标题】:Can I create a custom image MIME type in Android? 【发布时间】:2011-10-27 00:16:09 【问题描述】:

我的应用创建了一个与标准 .PNG 向后兼容的自定义 .PNG 文件,但我希望我的应用能够识别我的特殊 .PNG(而不是默认为图库)。创建图像后,我尝试将其注册为自定义 MIME 类型,但它们仍被扫描为常规 PNG。

File file = new File("/mnt/sdcard/custom.png");
//now scan the file into the content database
MediaScannerConnection.scanFile(this,
            new String[]  file.toString() , new String[]  "image/x-custom" ,
                new MediaScannerConnection.OnScanCompletedListener() 
            public void onScanCompleted(String path, Uri uri) 
                Log.i("ExternalStorage", "Scanned " + path + ":");
                Log.i("ExternalStorage", "-> uri=" + uri);

                ContentResolver cr = getContentResolver();
                String mime = cr.getType(uri);
                //mime returns image/png, not image/x-custom :(        
            

关于如何让 android 识别我的自定义 MIME 类型和/或允许我的应用识别扩展的 .PNG 的任何想法?

【问题讨论】:

如果你喜欢看一下实现:android.git.kernel.org/?p=platform/frameworks/… 似乎不支持自定义 mime 类型 :( 【参考方案1】:

扫描似乎是基于文件扩展名的,我今天才读到,我正试图记住在哪里..

【讨论】:

文档说您可以为文件指定可选的 mimeType。如果 mimeType 为 null,则将从文件扩展名中推断出 mimeType。我指定了一个 mimeType,所以我希望它被使用,而不是被忽略。【参考方案2】:

您必须有一些活动将自己(在清单上)注册为能够处理 .png 文件(或您的 mime 类型)。自定义 mime 类型文件的问题在于系统应该能够将您的 .png 识别为与常规 .png 不同的类型(它可能不会这样做)。所以你可以做你想做的最好的方法是创建一个可以处理所有 .png 的 IntentFilter。

你可以阅读它here和here。

【讨论】:

这意味着我还必须处理常规 .png 的查看,而不仅仅是我的。一旦我的活动被调用,我可以查看 .png,如果它只是一个通用的,让另一个活动处理 VIEW 意图? 当然,在 onReceive 方法中返回 false (表示你没有收到),或者如果这不起作用,只需启动一个新的 Intent 来查看文件。 我认为 onReceive 仅用于广播,我不认为查看图像的意图是广播,是吗?启动一个新的 Intent 是可行的,但是如果我的 Activity 被设置为 .pngs 的默认值,那不就是重新启动我的 Activity 并进行无限递归吗? 好吧,你不能阻止画廊查看 png 的。您还可以将自己的 png 的扩展名更改为其他内容......可能会有所帮助。是的,这将开始一个递归循环:/【参考方案3】:

你需要将你的mimetype和文件扩展名添加到android/frameworks/base/media/java/android/media/MediaFile.java。

当 mediascanner 在 MediaFile.java 中找不到您的 mimetype 时,它​​将根据文件扩展名为其获取新的 mimetype。

【讨论】:

以上是关于我可以在 Android 中创建自定义图像 MIME 类型吗?的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在使用内置字典的android中创建自定义键盘[关闭]

有没有办法在 android 中创建自定义应答机?

如何在 Mapbox iOS SDK 3.0 版中创建自定义图像标记?

在 Android 中创建自定义视图

在 Dundas Dashboards 中创建自定义条形图

如何在android中创建自定义导航抽屉