如何从Intent Filter获取文件路径(电子邮件附件/下载)

时间:2013-08-06 17:30:52

标签: android android-intent intentfilter

我在清单中定义了以下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>

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

编辑:在另一个问题中找到这个,它在从下载打开时起作用,但是给出了从电子邮件打开的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);
}

2 个答案:

答案 0 :(得分:2)

  

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

可能 是“文件路径”。您使用getIntent().getData()获取数据的Uri。然后,使用ContentResolveropen()InputStream的数据获取Uri

答案 1 :(得分:0)

从电子邮件中,您可能会获得EXTRA_TEXT而不是STREAM。所以STREAM出来了。

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

所以,下次你被问到:“电子邮件什么时候不是电子邮件?”,你就会知道答案,提问者会向你的优秀智慧屈服,并要求成为你的门徒。但我离题了......