Chinaunix首页 | 论坛 | 博客
  • 博客访问: 483897
  • 博文数量: 46
  • 博客积分: 2044
  • 博客等级: 上尉
  • 技术积分: 395
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-11 15:50
文章分类

全部博文(46)

文章存档

2012年(1)

2011年(19)

2010年(26)

我的朋友

分类: 嵌入式

2010-10-22 14:23:30

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操作。
可见,随意性是值得注意的坏招数。
 
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/aide1986/archive/2010/04/27/5536530.aspx
阅读(1208) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~