以前问过同样的问题,我全部测试了它们,但没有一个起作用。
我在文件中写入了一个序列化对象,并且命名为575454.myCustomExe
我希望我的应用仅打开*.myCustomExe
,而不再打开。
我如何保存文件:
File file = new File(Environment.getExternalStoragePublicDirectory("MyAppFolder") , getId() + ".myCustomExe");
if (!file.exists()) {
file.getParentFile().mkdirs();
file.createNewFile();
}
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file));
out.writeObject(serializableObject);
out.close();
我的意图过滤器:
<activity
android:name=".ui.activity.ImportActivity">
<intent-filter android:icon="@drawable/ic_save"
android:label="label"
android:priority="1">
<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=".*\.myCustomExe"/>
</intent-filter>
我也尝试过<data android:pathPattern=".*\\.myCustomExe" />
。
答案 0 :(得分:0)
文件扩展名在Android上使用不多。从Android Q开始,文件在Android上使用不多。不需要ContentProvider
在content
Uri
上放置类似文件的扩展名。因此,正如您所指出的那样,尽管我认为您在技术上是正确的,但效果并不理想。
对此您无能为力,因为您无法更改其他应用的行为。
如果您希望支持Intent
之类的常见ACTION_VIEW
操作,最好的选择是将文件保存为通用元格式(例如JSON,XML),且文件扩展名必须与之匹配,然后对相应的MIME类型进行<intent-filter>
过滤。您将需要解决用户选择的不是应用程序创建的文件的可能性,尽管从技术上讲,即使使用自定义扩展名,您也需要处理该文件。