如何添加自定义mime类型?

Mac*_*kan 38 android mime-types

我想要的是:能够通过邮件发送我的自定义文件,并使用我的应用程序从GMail中的预览按钮导入它,或者在文件浏览器中打开它.

我所知道的:我已经阅读了很多自定义mime类型处理程序,android不关心文件扩展等,但是如何为我的自定义文件创建mime类型?

问题:我需要成为内容提供商吗?我只想导入文件(来自备份)不提供任何东西.我见过人们有"application/abc"的处理程序说它工作正常,但是如何为我的文件"myFile.abc"和mime类型添加该连接?

如何注册/映射自定义mime类型的一些方向将不胜感激!:)

Dig*_*ara 5

据我所知,mime 类型非常灵活(我将我的创建为application/whatever)并且它们立即被 Android 接受,最早可以追溯到 Dalvik 2.1 版。为了正确处理它们,我添加了这个意图过滤器:

<intent-filter>
  <action android:name="android.intent.action.VIEW"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:mimeType="application/whatever" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

不过有一个警告。尽管我总是将发送意图的类型设置为 intent.setType("application/whatever");,但在某些手机上,我已经看到了到达时的实际数据application/octet(为了查看值,我分配了传入的意图并直接检查了它的值Intent currentIntent = getIntent();)。接收 Android 设备不知道如何处理传入的数据并告诉我。所以我加了

<intent-filter>
  <action android:name="android.intent.action.VIEW"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <data android:mimeType="application/octet-stream" />
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

这种方法当然会很麻烦,但 Gmail 的问题至少是它不一定会用它进来的名字来写文件,这使得我选择定义的任何 Path 都没用。至少对于传入的数据,octet-stream您知道它不是您要窃取的任何应用程序的特定数据......不过,您应该事后验证数据,而不仅仅是假设它对您的应用程序有效。


mat*_*990 2

未经测试,但类似的东西应该可以工作。将其与您要打开文件的 Activity 一起放入AndroidManifest.xml中:

<activity name=".ActivityHere">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="file" />
        <data android:mimeType="mimeTypeHere" />
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)