0

我在清单中定义了以下 Intent 过滤器,它允许我打开从浏览器和电子邮件附件下载的 .ips 文件。

<intent-filter
                android:icon='@drawable/ic_launcher'
                android:label="@string/quick_patcher_label"
                android:priority='1'>
            <action android:name="android.intent.action.VIEW" />
            <action android:name="android.intent.action.EDIT" />
            <action android:name="android.intent.action.PICK" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:mimeType="*/*" />
            <data android:pathPattern="*.ips" />
        </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="*/*" android:scheme="http" android:host="*" android:pathPattern=".*\\.ips" />
            <data android:mimeType="*/*" android:scheme="https" android:host="*" android:pathPattern=".*\\.ips" />
        </intent-filter>

我尝试了这个问题的部分答案,导致文件名为“false”,我也尝试了这个。如何从我的活动中检索使用此意图过滤器打开的文件的文件路径?

编辑:在另一个问题中发现了这一点,它在从下载打开时有效,但从电子邮件打开时会出现 NullPointerException。有谁知道这是为什么?

public String getRealPathFromURI(Uri contentUri) {
    String[] proj = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(contentUri, proj, null, null, null);
    int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}
4

2 回答 2

1

如何从我的活动中检索使用此意图过滤器打开的文件的文件路径?

可能没有“文件路径”。你getIntent().getData()用来获取Uri数据的。然后,使用ContentResolverandopenInputStream()从中获取InputStream数据Uri

于 2013-08-06T17:32:34.083 回答
0

从电子邮件中,您可能收到的是 EXTRA_TEXT 而不是 STREAM。所以 STREAM 出来为空。

电子邮件永远不会作为文件存在。您可以将它们保存到文件中。但随后它们不再是电子邮件。

所以,下次当你被问到:“什么时候电子邮件不是电子邮件?”时,你会知道答案,提问者会向你的上位智慧低头,请求成为你的弟子。但我离题了...

于 2014-01-04T23:11:14.930 回答