GitHub user sencenan opened a pull request: https://github.com/apache/cordova-plugin-camera/pull/143
[CB-10093][CB-9960][android] fix error resolving content uri to file url fixing: https://issues.apache.org/jira/browse/CB-10093 Different app returns different uri. This is causing getRealPath() to return empty path. Fixed: - Gallery: content://media/external/images/media/117209 - Google Photo: embeds a external image link inside another uri - Dropbox: old school file url Not fixed: - Google Drive: document uri, but has no document id, or the id cannot be used to query content resolver Notes: I have tested with: Gallery, Dropbox, Google Photo, and various file manager apps. However, this fix as is still does not address the problem with Google Drive. It seems to me that trying to get real file path from content uri seems to be a fundamentally flawed solution. It breaks the google sandbox between apps and this is going to get worse when more apps start to return the URL in "non-standard" formats. Use getContentResolver().openInputStream() and read the file directly could be a way forward, given that we are copying the image file already. For reference, I am using this following hack for my own branch to address problem with Google Drive: ```java private String ouputModifiedBitmap(Bitmap bitmap, Uri uri) throws IOException { // Some content: URIs do not map to file paths (e.g. picasa). String realPath = FileHelper.getRealPath(uri, this.cordova); //START OF HACK if (realPath.length() == 0) { String copiedFilePath = getTempDirectoryPath() + "/" + System.currentTimeMillis() + ".copied." + (this.encodingType == JPEG ? "jpg" : "png"); InputStream fin = this.cordova.getActivity().getContentResolver().openInputStream(uri); OutputStream fout = new FileOutputStream(copiedFilePath); byte[] buf = new byte[1024 * 4]; int len; while ((len = fin.read(buf)) > 0) { fout.write(buf, 0, len); } fin.close(); fout.close(); realPath = copiedFilePath; } //END OF HACK // rest of ouputModifiedBitmap method } ``` You can merge this pull request into a Git repository by running: $ git pull https://github.com/sencenan/cordova-plugin-camera master Alternatively you can review and apply these changes as the patch at: https://github.com/apache/cordova-plugin-camera/pull/143.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #143 ---- commit c09a8cf09b371c6071256444b81b18c10b3b70af Author: sen.ce...@gmail.com <sen.ce...@gmail.com> Date: 2015-11-30T20:18:03Z m: fix the crash when the uri passed into outputModifiedBitmap() is not a document URI commit 05cdb0133f53fff109298ac2fb10a89026bb6462 Author: sencenan <sen.ce...@gmail.com> Date: 2015-12-01T20:27:10Z m: response to code reivew on pull request 141 commit 83978ea3736168520eae2935ee0318d6fb9bc7c3 Author: sen.ce...@gmail.com <sen.ce...@gmail.com> Date: 2015-12-03T05:49:47Z [CB-10093][CB-9960][android] fix error resolving content uri to file url ---- --- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. --- --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@cordova.apache.org For additional commands, e-mail: dev-h...@cordova.apache.org