我无法让capture.captureImage
工作。使用Cordova 3.5.0,org.apache.cordova.file-1.3.0
,org.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
答案 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。