自定义文件关联指的是打开一个你自己创建的文件,例如后缀是(.abc)。
首先我先介绍下常见文件关联,例如.txt、.jpg。
在Android中,任何文件类型或者MIME类型的关联性打开,是通过广播Intent来实现的。例如,你如果想要注册自己为.txt类型的查看器或者图片查看器,必须为你的Activity加入intent-filter来获取到一个来源所发出的Intent Broadcasting(广播),从而达到关联的目的。
首先我们来看一下data属性里的值
android:host="string"
android:mimeType="string"
android:path="string"
android:pathPattern="string"
android:pathPrefix="string"
android:port="string"
android:scheme="string"/>
我们可以通过URL启动相应data属性描述的Activity。
URL:
scheme://host:port/path or pathPrefix or pathPattern
属性:
android:host
URL的主机部分
android:mimeType
MIME 媒体类型,例如image/jpeg或者text/xml。
一个合法的File Manager(文件管理器)在执行Open动作时,应该是发出一个intent.ACTION_VIEW。所以你的intent-filter应该是这样子的:
在这里,你必须同时申明android:scheme, android:host, android:pathPattern, 方可令pathPattern正确生效。第一个文件关联指的是可以匹配file://mnt/sdcard/12345.txt这样的请求,启动Demo1Activity,第二个文件关联指的是可以匹配content://com.android.test/sdcard/123.txt 这样的请求,在文件管理器中点击这类的txt,可以启动Demo2Activity。如果你有需要,你可以加入android:mimeType来限定文件类型。例如你想打开jpg文件时启动你的activity,这是可以在里添加,具体的mimeType有哪些,你可以上网找,这里我就不一一列举了。
最后我们回到正题,怎么关联自定义文件,我想看到这里大家应该也有思路的,就是修改pathPattern=".*.abc",注意,由于这里打开的是文件,所以android:scheme="file"。这样就可以打开后缀是.adc文件,启动相应的activity。
=================================================
在manifest文件里->activity 添加
这样就把当前程序注册为 可以打开/查看所有类型的文件. 或者要查看jpeg, mimeType要改为: image/jpeg
当在文件管理器里点击任何文件, 系统都会试图去执行你的程序.
--------------------------------------------分割线----------------------------------------
http://blog.csdn.net/aide1986/archive/2010/04/27/5536530.aspx
一个合法的File Manager在执行Open动作时,应该是发出一个Intent.VIEW Action。所以你的intent-filter应该是这样子的:
intent-filter>
intent-filter>
在这当中,data块缺一不可,你必须同时申明android:scheme, android:host, android:pathPattern, 方可令pathPattern正确生效。对于content scheme,将会匹配诸如:content://com.metago.astro.filesystem/sdcard/txt /pg17155.txt 这样的请求,你的Activity将可以有效地打开这样的txt文件。对于file scheme,大致会匹配诸如:file:///sdcard/txt/pg17155.txt这样的请求,并且,如果有必要,你可以加入 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操作。
可见,随意性是值得注意的坏招数。
--------------------------------------------分割线----------------------------------------
我们看一下 android 文件的mime类型:
{".3gp","video/3gpp"},
{".apk","application/vnd.android.package-archive"},
{".asf","video/x-ms-asf"},
{".avi","video/x-msvideo"},
{".bin","application/octet-stream"},
{".bmp","ima