Android读取自定义文件扩展名附件

时间:2017-04-04 17:57:52

标签: android email mime-types android-contentresolver

我可以成功打开自定义文件扩展名。我的问题是从Gmail中读取内容。我花了几个小时试图弄清楚这个问题,并且必须有一些显而易见的东西。

我在应用程序的AndroidManifest中有一个特定于应用程序的扩展名“.myextension”和以下文件。这部分有效。

<intent-filter
            android:icon="@drawable/my_launcher_icon">
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data
                android:mimeType="application/octet-stream"
                android:host="*"
                android:pathPattern=".*\\.myextension"
                />
            <data
                android:mimeType="application/myextension"
                android:host="*"
                android:pathPattern=".*\\. myextension"
                />
        </intent-filter>

我尝试使用以下代码阅读Uri:

        Uri data = intent.getData();
    if (data == null) {
        return;
    }

            ContentResolver cr = this.getContentResolver();
            InputStream is = cr.openInputStream(data);
            if (is == null) return;

            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();

            int i;
            try {
                i = is.read();
                while (i != -1)
                {
                    byteArrayOutputStream.write(i);
                    i = is.read();
                }
                is.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

            String serverURL = byteArrayOutputStream.toString();
            is.close();

xxx.myextension文件是我发送给用户的单行文本文件。

当我点按Gmail客户端中的电子邮件附件时,我的活动会收到以下内容(从意图数据中提取):

“内容://com.google.android.gm.email.attachmentprovider/1/22/RAW” mime类型是:“typ = application / myextension”

当我试图阅读它时,我只得到二进制(看似)乱码数据。

当我使用BlueMail点击相同的附件时,我的活动会收到:

“内容://me.bluemail.mail.attachmentprovider/44ce7126-f7f7-46d9-9b6e-41fb391a8de6/10e6c7e0-a0d0-40cc-925e-ef8a5cc3ee72/VIEW” 并且mime类型是“typ = application / octet-stream”

在这种情况下我可以正确读取字符串。 任何帮助将不胜感激。

0 个答案:

没有答案