2014-10-12 36 views
1

我無法使capture.captureImage正常工作。使用科爾多瓦3.5.0,org.apache.cordova.file-1.3.0,org.apache.cordova.media-capture-0.3.3。調試在Eclipse中顯示,Cordova captureImage Failed FileNotFoundException

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

返回URI =內容://媒體/外部/圖像/媒體/ NNNN但

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

拋出一個FileNotFoundException

回答

1

看來,問題是由插入方法返回的uri沒有通過openOutputStream正確解析。什麼工作對我來說是不是調用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測試。