具有自定义扩展名的Android打开文件

时间:2019-05-17 16:15:04

标签: java android xml android-intent

我的Android Studio应用程序有问题。 我的应用程序需要在外部存储中保存一些带有自定义扩展名(.ard)的文件。 然后,打开文件选择器,选择一个.ard文件,以便应用程序可以打开它。

这里的事情是,当我打开文件选择器时,我找不到我的.ard文件,即使在它们所在的文件夹中,我也只能使用文件资源管理器找到它们,但是从我的Apps文件中找不到选择器。 我想做的另一件事是,当有人从Android文件资源管理器中单击文件时,我打开了应用程序并显示了一个对话框,当您从外部存储中打开文件时会触发一个事件吗?。

而且,如何为.ard文件设置图像,以便当您在文件资源管理器中看到它们时,文件带有该图标?

谢谢。

这是我的Android清单代码:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="sebgarcia.acardia">
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".HomeActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>



            <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data android:scheme="file"/>
            <data android:mimeType="*/*"/>
            <data android:pathPattern=".*\\.ard"/>
            <!-- These additional pathPattern blocks are to allow for paths with
            additional periods in them. See:
            http://stackoverflow.com/questions/3400072/pathpattern-to-match-file-extension-does-not-work-if-a-period-exists-elsewhere-i/8599921 -->
            <data android:pathPattern=".*\\..*\\.ard"/>
            <data android:pathPattern=".*\\..*\\..*\\.ard"/>
            <data android:pathPattern=".*\\..*\\..*\\..*\\.ard"/>
            <data android:pathPattern=".*\\..*\\..*\\..*\\..*\\.ard"/>
            <data android:host="*"/>
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data android:scheme="file"/>
            <data android:pathPattern=".*\\.ard"/>

            <data android:host="*"/>
        </intent-filter>

        <intent-filter>
            <action android:name="android.intent.action.VIEW"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.BROWSABLE"/>
            <data android:mimeType="application/vnd.ni.custom"
                android:scheme="file"/>
            <data android:host="*"/>
            <data android:pathPattern=".*\\.ard" />
    </intent-filter>

</application>

</manifest>

这是我的对话框代码(从活动中调用)

private void StartSearch()
    {
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("text/ard");
        intent.addCategory(Intent.CATEGORY_OPENABLE);

        try
        {
            startActivityForResult(
                    Intent.createChooser(intent, "Select a file to import"), Code
            );
        }
        catch (android.content.ActivityNotFoundException ex)
        {
            //Doesnt have a File Manager
            Toast.makeText(getContext(), "Please, Install a File Manager", Toast.LENGTH_SHORT).show();
        }
    }


 @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        int Code = 43;

        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == Code && resultCode == Activity.RESULT_OK) {
            if (data != null) {
                Uri uri = data.getData();
                Toast.makeText(this, "Opened File", Toast.LENGTH_SHORT).show();
            }

        }

    }

0 个答案:

没有答案