无法从其他应用程序获取收到的action_send文件

时间:2017-01-13 18:09:02

标签: android

我的应用程序应该能够从其他应用程序打开任何文件

        <intent-filter>
            <action android:name="android.intent.action.SEND"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <data android:mimeType="*/*"/>
        </intent-filter>

在活动中,我尝试将文件从意图中删除

   Intent i = getIntent();
    String action = i.getAction();
    if(Intent.ACTION_SEND.equals(action)){
        Bundle bundle = i.getExtras();
        Uri uri = (Uri)bundle.get(Intent.EXTRA_STREAM);
        File file = new File(uri.getPath());

现在,如果文件已经在我的磁盘上,并且我与我的应用程序共享/打开它,它可以正常工作。但是,如果我尝试从Dropbox导出它或从其他应用程序打开它,稍后在我使用我的文件的代码中,我会收到此错误。

java.io.FileNotFoundException: /filecache/faf4b9ba-43c9-4292-807b-c18aae702b5a (No such file or directory)

过滤器是否存在问题(不够具体)或者我是否以错误的方式将文件从意图中删除?

1 个答案:

答案 0 :(得分:1)

Uri不是File。事实上,在大多数情况下,您收到的Uri将是content:// Uri(特别是在Android 7.0+设备上you cannot share file:// Uris across apps),您可以直接访问基础文件。

您应该使用getContentResolver().openInputStream(uri)获取InputStream收到的Uri内容。