mirror of
https://github.com/apache/cordova-plugin-camera.git
synced 2025-01-18 19:22:51 +08:00
fix: return content uris when possible when selecting from gallery (#902)
This commit is contained in:
parent
a672c31efb
commit
2eaa9a3972
@ -728,77 +728,68 @@ public class CameraLauncher extends CordovaPlugin implements MediaScannerConnect
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
String fileLocation = FileHelper.getRealPath(uri, this.cordova);
|
|
||||||
LOG.d(LOG_TAG, "File location is: " + fileLocation);
|
|
||||||
|
|
||||||
String uriString = uri.toString();
|
String uriString = uri.toString();
|
||||||
String finalLocation = fileLocation != null ? fileLocation : uriString;
|
|
||||||
String mimeTypeOfGalleryFile = FileHelper.getMimeType(uriString, this.cordova);
|
String mimeTypeOfGalleryFile = FileHelper.getMimeType(uriString, this.cordova);
|
||||||
|
|
||||||
if (finalLocation == null) {
|
// If you ask for video or the selected file cannot be processed
|
||||||
this.failPicture("Error retrieving result.");
|
// there will be no attempt to resize any returned data.
|
||||||
|
if (this.mediaType == VIDEO || !isImageMimeTypeProcessable(mimeTypeOfGalleryFile)) {
|
||||||
|
this.callbackContext.success(uriString);
|
||||||
} else {
|
} else {
|
||||||
// If you ask for video or the selected file cannot be processed
|
|
||||||
// there will be no attempt to resize any returned data.
|
// This is a special case to just return the path as no scaling,
|
||||||
if (this.mediaType == VIDEO || !isImageMimeTypeProcessable(mimeTypeOfGalleryFile)) {
|
// rotating, nor compressing needs to be done
|
||||||
this.callbackContext.success(finalLocation);
|
if (this.targetHeight == -1 && this.targetWidth == -1 &&
|
||||||
|
destType == FILE_URI && !this.correctOrientation &&
|
||||||
|
getMimetypeForEncodingType().equalsIgnoreCase(mimeTypeOfGalleryFile))
|
||||||
|
{
|
||||||
|
this.callbackContext.success(uriString);
|
||||||
} else {
|
} else {
|
||||||
|
Bitmap bitmap = null;
|
||||||
// This is a special case to just return the path as no scaling,
|
try {
|
||||||
// rotating, nor compressing needs to be done
|
bitmap = getScaledAndRotatedBitmap(uriString);
|
||||||
if (this.targetHeight == -1 && this.targetWidth == -1 &&
|
} catch (IOException e) {
|
||||||
destType == FILE_URI && !this.correctOrientation &&
|
e.printStackTrace();
|
||||||
getMimetypeForEncodingType().equalsIgnoreCase(mimeTypeOfGalleryFile))
|
|
||||||
{
|
|
||||||
this.callbackContext.success(finalLocation);
|
|
||||||
} else {
|
|
||||||
Bitmap bitmap = null;
|
|
||||||
try {
|
|
||||||
bitmap = getScaledAndRotatedBitmap(uriString);
|
|
||||||
} catch (IOException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
if (bitmap == null) {
|
|
||||||
LOG.d(LOG_TAG, "I either have a null image path or bitmap");
|
|
||||||
this.failPicture("Unable to create bitmap!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// If sending base64 image back
|
|
||||||
if (destType == DATA_URL) {
|
|
||||||
this.processPicture(bitmap, this.encodingType);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If sending filename back
|
|
||||||
else if (destType == FILE_URI) {
|
|
||||||
// Did we modify the image?
|
|
||||||
if ( (this.targetHeight > 0 && this.targetWidth > 0) ||
|
|
||||||
(this.correctOrientation && this.orientationCorrected) ||
|
|
||||||
!mimeTypeOfGalleryFile.equalsIgnoreCase(getMimetypeForEncodingType()))
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
String modifiedPath = this.outputModifiedBitmap(bitmap, uri, mimeTypeOfGalleryFile);
|
|
||||||
// The modified image is cached by the app in order to get around this and not have to delete you
|
|
||||||
// application cache I'm adding the current system time to the end of the file url.
|
|
||||||
this.callbackContext.success("file://" + modifiedPath + "?" + System.currentTimeMillis());
|
|
||||||
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
this.failPicture("Error retrieving image: "+e.getLocalizedMessage());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
this.callbackContext.success(finalLocation);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (bitmap != null) {
|
|
||||||
bitmap.recycle();
|
|
||||||
bitmap = null;
|
|
||||||
}
|
|
||||||
System.gc();
|
|
||||||
}
|
}
|
||||||
|
if (bitmap == null) {
|
||||||
|
LOG.d(LOG_TAG, "I either have a null image path or bitmap");
|
||||||
|
this.failPicture("Unable to create bitmap!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If sending base64 image back
|
||||||
|
if (destType == DATA_URL) {
|
||||||
|
this.processPicture(bitmap, this.encodingType);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If sending filename back
|
||||||
|
else if (destType == FILE_URI) {
|
||||||
|
// Did we modify the image?
|
||||||
|
if ( (this.targetHeight > 0 && this.targetWidth > 0) ||
|
||||||
|
(this.correctOrientation && this.orientationCorrected) ||
|
||||||
|
!mimeTypeOfGalleryFile.equalsIgnoreCase(getMimetypeForEncodingType()))
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
String modifiedPath = this.outputModifiedBitmap(bitmap, uri, mimeTypeOfGalleryFile);
|
||||||
|
// The modified image is cached by the app in order to get around this and not have to delete you
|
||||||
|
// application cache I'm adding the current system time to the end of the file url.
|
||||||
|
this.callbackContext.success("file://" + modifiedPath + "?" + System.currentTimeMillis());
|
||||||
|
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
this.failPicture("Error retrieving image: "+e.getLocalizedMessage());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.callbackContext.success(uriString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (bitmap != null) {
|
||||||
|
bitmap.recycle();
|
||||||
|
bitmap = null;
|
||||||
|
}
|
||||||
|
System.gc();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user