Android中是没有MIME类型注册的概念的,相反的,任何文件类型或者MIME类型的关联性打开,是通过广播Intent来实现的。也就是说,你如果想要注册自己为.txt类型的查看器,必须为你的Activity加入intent-filter来获取到一个来源所发出的Intent Broadcasting,从而达到关联的目的。
一个合法的File Manager在执行Open动作时,应该是发出一个Intent.VIEW Action。所以你的intent-filter应该是这样子的:
view plaincopy to clipboardprint?
在这当中,data块缺一不可,你必须同时申明android:scheme, android:host, android:pathPattern, 方可令pathPattern正确生效。对于content scheme,将会匹配诸如:content://com.metago.astro.filesystem/sdcard/txt /pg17155.txt 这样的请求,你的Activity将可以有效地打开这样的txt文件。对于file scheme,大致会匹配诸如:这样的请求,并且,如果有必要,你可以加入 android:mimeType限定。
也就是说,尽管Android SDK的层面上,你不可能了解到哪些mime已经注册,一个自定义的mime如何注册,但对于基础系统(linux os layer)来说,内置的mime type还是存在的,这方面你可以参考Intent SDK文档和Notebook SDK Sample获得一鳞半爪的信息。
对于你自己想要关联的文件后缀,则应该使用上面的intent-filter组合来完成关联。
一旦intent-filter关联完成,在Activity的onCreate,onNewIntent中将可通过:
Intent intent=getIntent();
Uri uri=(Uri)intent.getData();
String path=uri.getPath();
序列获得关联打开文件的绝对路径。
这样的方法在ASTRO文件管理器中测试通过,并且在另一个测试project中进行了测试和证明机制有效。不过,在Root Explorer,And Explorer中均失败了,原因正在于这几个浏览器并不执行符合Android SDK规范的File Open操作。
可见,随意性是值得注意的坏招数。
阅读(1193) | 评论(0) | 转发(0) |