2

Использование Titanium на Android 4+ Я хочу получить доступ к файлу jpeg, снятому с камерой. Мне нужно достичь двух целей: вернуть данные EXIF ​​и передать байты в конечную точку API. Моя проблема в том, что я не могу получить доступ к файлу ...Titanium 3.X getFile() из локального хранилища

Я использую сторонний модуль для обработки выбора файла (Multi Image Picker), который возвращает список местоположений файлов, используя приложение File Manager эмулятор (GenyMotion) Я могу подтвердить правильность расположения на диске. Однако, следующие всегда возвращает ложь ...

var file = Ti.Filesystem.getFile('/mnt/sdcard/DCIM/Camera/IMG_20140901_083735.jpg'); 
Ti.API.info('Do we have a file? ' (file.exists()? 'YES' : 'NO')); 

Выходной сигнал для выше будет ... У нас есть файл? НЕТ

Дальнейшее чтение показывает, что Titanium имеет 5 предопределенных мест расположения папок, которые могут быть переданы в метод getFile(), и одна из возможных причин того, что вышеприведенный код не работает, заключается в том, что он по умолчанию находится в папке «Resouces»? Тем не менее, все, кроме одного места в папке, являются специфическими для приложения, исключение - externalStorageLocation. Теперь мое понимание устройства Android заключается в том, что любое изображение, сделанное с помощью камеры, будет храниться во внутренней системе хранения, если не присутствует SD-карта. Это верно в моем случае, как следующие списки файлов 0 ...

var extDir = Ti.Filesystem.getExternalStorageDirectory(); 
var dir = Ti.Filesystem.getFile(extDir); 
var dir_files = dir.getDirectoryListing(); 

Ti.API.info('External files... ' + dir_files.length); 

Выход для выше будет ... Внешние файлы ... 0

Так я прав в размышлении Appcelerator просто не включил возможность доступа к локальному хранилищу (за пределами любых конкретных приложений) в своем API? Или я что-то упускаю, и есть другой способ?

ответ

1

Благодаря @Bharal я был в состоянии найти решение ...

С помощью метода Ti.Media.openPhotoGallery() я был в состоянии определить правильный исходный путь для изображения путем проверки объекта события вернулся из обратного вызова успеха.

Путь отсутствовал «файл: //» в начале, я не мог быть на 100% уверенным, но я подозреваю, что это вынуждает метод getFile() использовать абсолютный путь, а не относительный путь из ресурсов папка.

Чтобы подтвердить, следующий объект возвращает объект ...

var file = Ti.Filesystem.getFile('file://[path]'); 

Где [путь] Местоположение папки, как сообщается в приложении Диспетчер файлов на устройстве, например, «» /mnt/sdcard/DCIM/Camera/IMG_20140901_083735.jpg

0

Yah mon, i dunno.

Вот я, который я использовал, когда я делал фотографии на моем приложении Ti, но потом я избавился от этого раздела, потому что понял, что мне не нужно делать снимки doin. Картинки, ты, что ты хочешь, лет?

Ti.Media.openPhotoGallery({ //dissall jus' open up a piccha selectin' ting. ez. 
     success:function(event){ 
      var image = event.media; 
      if (event.mediaType==Ti.Media.MEDIA_TYPE_PHOTO){ 
//so image.nativePath is the path to the image. 
// profileImg be jus' some Ti.UI.createImageView ting yo be puttin in yo' page. 
//meyybe yo be wantin' alert(image.nativePath); here too, dat be helpin? 
       profileImg.image = image.nativePath; 
      } 

     }, 
     cancel:function(){ 
      //we cancelled out, why we doin' that? 
     }  
    }); 

Теперь, не собирается быть действительно helpin' вас, но лет можно использовать, чтобы увидеть Ват родной путь йо piccha быть Усин быть, а затем Seein', если возможно, что лет быть Puttin' в летнем коде.

Jus 'wrap the above как addEventListener ("click", function() {...}); а также jus 'добавить элемент sam, чтобы поставить piccha in, если вы хотите увидеть пикчу, но я скажу вам, что вы picchas mon, а иногда и то, что стоит времени.

Но meyybe yo wantin 'не использует эмулятор для деления, они могут быть «странными», может быть, у вас какой-то маленький телефон? Так вы можете найти, если у вас есть дем-память, а meyybe - прорезы памяти, а также лук памяти.

+0

Благодаря @bharal, это поставил меня на правильный путь, чтобы решить проблему. Если бы я мог, я бы добавил +1. – AdrianHolmes

+0

@AdrianHolmes рад, что это помогло - caipirinha, которую я имел, прежде чем я написал свой ответ, помог мне передать дух древней прохладной dood, чтобы ответить на ваш вопрос. VoodooJones, вероятно, настоящий герой. – bharal

Смежные вопросы