Cordova captureImage失败FileNotFoundException

时间:2014-10-12 01:37:46

标签: java android cordova

我无法让capture.captureImage工作。使用Cordova 3.5.0,org.apache.cordova.file-1.3.0org.apache.cordova.media-capture-0.3.3。在Eclipse中进行调试显示

that.cordova.getActivity().getContentResolver().insert(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
onActivityResult中的

返回uri = content:// media / external / images / media / nnnn但是

OutputStream os = that.cordova.getActivity().getContentResolver().openOutputStream(uri)

抛出FileNotFoundException

2 个答案:

答案 0 :(得分:1)

看来问题是openOutputStream没有正确解析insert方法返回的uri。对我有用的不是调用openOutputStream,而是执行以下操作:

String dfname = getRealPathFromURI(uri);
File df = new File(dfname);
File dfolder = df.getParentFile();
if(!dfolder.exists()) dfolder.mkdirs();
if(!df.exists()) df.createNewFile();
FileOutputStream os = new FileOutputStream(df);

private String getRealPathFromURI(Uri contentURI) {
    Cursor cursor = this.cordova.getActivity().getContentResolver().query(contentURI, null, null, null, null);
    if (cursor == null) { // Source is Dropbox or other similar local file path
        return contentURI.getPath();
    } else { 
        cursor.moveToFirst(); 
        int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
        return cursor.getString(idx); 
    }
}

如果尚未导入,则需要导入java.io.FileOutputStream。我感谢Isaac Zais他的answer指出了正确的方向和getRealPathFromURI代码。

如果Cordova开发人员可以解释这是org.apache.cordova.media-capture中的错误还是其他地方,或者如果有办法让它工作而不必修改最新版本,那将是很好的插件。

在三星Galaxy S5,Android 4.4.4上测试。

答案 1 :(得分:1)

我没有足够的声誉评论您的答案,但dp22193的补丁效果很好!有关错误报告及其附带的补丁,请参阅https://issues.apache.org/jira/browse/CB-7768