当在文件管理器里点击某个文件时,会弹出一个打开文件方式的列表,如果需要将自己的App添加到列表中,需要修改App的 Manifest文件。查找了很多资料,写法基本一致,即在Activity中添加一个Intent filter,代码如下:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="file" />
<data android:host="*"/>
<data android:mimeType="*/*" />
<data android:pathPattern=".*\\.abc" />
</intent-filter>
经过实际测试并没有任何作用,但是既然这么多人都是这么写的,那么应该这个代码本身是没问题的,那问题就只有两种可能:其一可能是我自己的代码哪里有问题,其二是现在的版本已经不支持这么写了。到Google搜索了一番,终于看到有人说新版本的Android中已经不使用file类型的路径了,而是使用content开头。于是将代码按如下修改后,期待已久App图标终于出现在打开方式列表中了。
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="content" />
<data android:host="*"/>
<data android:mimeType="*/*" />
<data android:pathPattern=".*\\.abc" />
</intent-filter>
为了兼容以前的版本,我把这两个Intent filter都写在了Activity中,暂时没发现有什么问题。
在对应的Activity的OnCreate函数中,用getIntent().getData()函数即可获取到传入的文件Uri路径(content://…),不过要注意Activity的启动模式,否则可能会在文件管理器的栈上创建你的Acitivity的实例。另外如果用户已经打开了Activity,则OnCreate函数已经被调用过了,可能会没法获取这个Uri,我的解决方法是创建一个新的Activity用于读取这个Uri路径,如果有更好的办法请指教。