从外部应用程序接收数据时解析路径

时间:2014-01-07 15:04:28

标签: android android-intent

我正在实现在我的应用程序中保存文件的功能,该文件由一些外部应用程序发送。

我提供了对单个和多个文件的支持。为所有类型的文件提供处理。

但我无法处理以下情况。

我从电子邮件客户端查看文件 - >在QuickOffice中查看 - >点击发送 - >选择我的应用 - >然后点击保存在我的应用中。

因为我得到了包含在异常

中的以下路径
java.io.FileNotFoundException: /file:/data/data/com.qo.android.sp.oem/files/temp/Error.log: open failed: ENOENT (No such file or directory)

我看过这篇文章对于处理具有内容方案的uri非常有用 Get filename and path from URI from mediastore

以下是我的代码

Uri uri = (Uri) iterator.next();
                            if ("content".equals(uri.getScheme())) {
                                filePath = getFilePathFromContentUri(uri, hostAcitvity.getContentResolver());
                            }
                            else {
                                filePath = uri.getPath();
                            }
                            fileName = uri.getLastPathSegment();
                            fileSize = hostAcitvity.getContentResolver().openInputStream(uri).available();

getFilePathFromContentUri的代码

private String getFilePathFromContentUri(Uri selectedVideoUri, ContentResolver contentResolver)
    {
        String filePath;
        String[] filePathColumn = { MediaColumns.DATA };

        Cursor cursor = contentResolver.query(selectedVideoUri, filePathColumn, null, null, null);
        cursor.moveToFirst();

        int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
        filePath = cursor.getString(columnIndex);
        cursor.close();
        return filePath;
    }

然后我将路径包装在FileInputStream中,这会引发上述异常 无法正确解析文件路径。这是找到路径的正确方法吗?

欢呼声, Saurav

1 个答案:

答案 0 :(得分:0)

  

我看过这篇文章对于处理具有内容方案的uri非常有用

从未如此可靠地工作,将来的工作效率会更低。

  

这是找到路径的正确方法吗?

不,因为不要求每个Uri映射到您可以访问的文件系统上的路径。

使用getInputStream()上的ContentResolver获取InputStream上的Uri,然后使用该数据。