我在清单中定义了以下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);
}
答案 0 :(得分:2)
如何从我的活动中检索我使用此意图过滤器打开的文件的文件路径?
可能 是“文件路径”。您使用getIntent().getData()
获取数据的Uri
。然后,使用ContentResolver
和open()
为InputStream
的数据获取Uri
。
答案 1 :(得分:0)
从电子邮件中,您可能会获得EXTRA_TEXT而不是STREAM。所以STREAM出来了。
电子邮件永远不会作为文件存在。您可以将它们保存到文件中。但他们不再是电子邮件了。
所以,下次你被问到:“电子邮件什么时候不是电子邮件?”,你就会知道答案,提问者会向你的优秀智慧屈服,并要求成为你的门徒。但我离题了......