Разрабатывая простое приложение работающее с галереей и фотоаппаратом смартфона на Apache Cordova столкнулся с проблемой. На первый взгляд выглядело пустяковой проблемой, но часы летели - проблема не хотела решиться.
А проблема вот в чем:
1. Берем фото из галереи.
2. Выводим саму картинку
3. Сохраняем путь к нему.
4. При последующем открывании страницы с картинкой выводи картинку, и при клике на картинку она открывается как обычная картинка, где можно увеличить и пролистывать. Уф, тавтология (туфтология) получилось. Ну и хер с ним.Идем дальше...
Сама проблем кроется в путях.
Выбор картинки из галереи вызывается следующим образом.
function getImageGallery() { navigator.camera.getPicture(onPhotoSuccessURI, function (message) { console.log(message); }, { quality: 50, destinationType: destinationType.FILE_URI, sourceType: navigator.camera.PictureSourceType.SAVEDPHOTOALBUM } ); }
При успешном открывании вызывается функция:
function onPhotoSuccessURI(imageURI) { var src = imageURI; console.log(src); $('#smallImage').append(''); }
Видим,думаем. киваем если все ясно.
Путь в данном случаем имеет вид :content://com.android.providers.media.documents/document/image%3A352
Но плагин FullScreen , при помощи которого открываю фото, упорно не хочет обрабатывать такие пути, ему подавай че нить тип такого file://.....
Сначала пытался делать на JS, искал на форумах пути решения, но все что приводилось не работало. В итоге пришлось лезть в недра плагина, редактировать JAVA файлы.
Итак, открываем
...youapp\plugins\cordova-plugin-camera\src\android
Редактируем файл CameraLauncher.java
Ищем такую строку:
. Все, после этих не хитрых манипуляций с путями будет все отлично.
Согласен, статья ужасная, но это больше для меня чем для кого либо.
Сначала пытался делать на JS, искал на форумах пути решения, но все что приводилось не работало. В итоге пришлось лезть в недра плагина, редактировать JAVA файлы.
Итак, открываем
...youapp\plugins\cordova-plugin-camera\src\android
Редактируем файл CameraLauncher.java
Ищем такую строку:
// This is a special case to just return the path as no scaling, // rotating, nor compressing needs to be done if (this.targetHeight == -1 && this.targetWidth == -1 && (destType == FILE_URI || destType == NATIVE_URI) && !this.correctOrientation && mimeType.equalsIgnoreCase(getMimetypeForFormat(encodingType))) { // ВОТ ЭТО ЗАМЕНЯЕМ //this.callbackContext.success(uriString); // НА ЭТО this.callbackContext.success( getRealPathFromURI(uri));// getRealPathFromURI(uri) } else { .... } // В этом же файле вставляем эту функцию public String getRealPathFromURI(Uri contentUri) { String res = null; String[] proj = { MediaStore.Images.Media.DATA }; Cursor cursor = cordova.getActivity().getContentResolver().query(contentUri, proj, null, null, null); if(cursor.moveToFirst()){; int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); res = cursor.getString(column_index); } cursor.close(); return res; }
. Все, после этих не хитрых манипуляций с путями будет все отлично.
Согласен, статья ужасная, но это больше для меня чем для кого либо.
Комментариев нет:
Отправить комментарий