自定义文件扩展名无法打开

时间:2019-04-07 17:40:03

标签: android file mime-types intentfilter

以前问过同样的问题,我全部测试了它们,但没有一个起作用。
我在文件中写入了一个序列化对象,并且命名为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" />

1 个答案:

答案 0 :(得分:0)

文件扩展名在Android上使用不多。从Android Q开始,文件在Android上使用不多。不需要ContentProvidercontent Uri上放置类似文件的扩展名。因此,正如您所指出的那样,尽管我认为您在技术上是正确的,但效果并不理想。

对此您无能为力,因为您无法更改其他应用的行为。

如果您希望支持Intent之类的常见ACTION_VIEW操作,最好的选择是将文件保存为通用元格式(例如JSON,XML),且文件扩展名必须与之匹配,然后对相应的MIME类型进行<intent-filter>过滤。您将需要解决用户选择的不是应用程序创建的文件的可能性,尽管从技术上讲,即使使用自定义扩展名,您也需要处理该文件。