0

Примечание:, хотя я использую телефонную разборку, вопрос заключается не в какой-то проблеме.

Привет, я разрабатываю приложение для Android. мое приложение использует phonegap 1.3.

mi проблема ...
Im используя phonegap apis, чтобы сделать снимок и отобразить его в своем приложении. Но что происходит по какой-то причине, os убивает мое приложение после запуска камеры, так что после щелчка фотографии мое приложение перезагружается, и оно не получает информацию об убранном снимке.
Как обходной путь к этой проблеме (the problem), я разработал плагин phonegap, который при запуске приложения проверяет, сработало ли приложение при съемке (некоторые флаги в коде), и если он перезагружается после сбоя, он извлекает Pic .jpg, снятый камерой, и пытается отобразить ее. Проблема в том, что он не может получить правильный образ или даже собственный файл .jpg.

Приложение Android phonegap: невозможно получить изображение, сделанное камерой, используя мой собственный код (не телефонные разговоры)

мили код ...
PhoneGap делает намерение начать камеру и проходит Ури для pic.jpg, что создает в этом намерении, которое она проходит в startActivityForResult.

Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 
File photo = new File(DirectoryManager.getTempDirectoryPath(ctx), "Pic.jpg"); 
intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo)); 
this.imageUri = Uri.fromFile(photo); 
this.ctx.startActivityForResult((Plugin) this, intent, 0); 

Примечание- Приведенный выше код из файла CameraLauncher.java из PhoneGap.
Теперь, предполагая, что startActivityForResult сохраняет изображение, которое пользователь фиксирует в файле, который был создан «фото» в приведенном выше коде. Поэтому, даже если после закрытия os приложение закрывается, пока камера открыта (см. - the problem), там будет сохранена фотография. ПОЖАЛУЙСТА, исправьте меня, если это предположение неверно или если фотография может быть сохранена где-то в другом месте.
Итак, принимая во внимание это предположение, я написал плагин, который извлекает этот файл, используя ту же самую логику, которая использует PhoneGap в CameraLauncher.java


Uri imageUri; 
ExifHelper exif = new ExifHelper(); 
exif.createInFile(getTempDirectoryPath(ctx) + "/Pic.jpg"); 
exif.readExifData(); 
File photo = new File(getTempDirectoryPath(ctx), "Pic.jpg"); 
imageUri = Uri.fromFile(photo); 

Bitmap bitmap = null; 

bitmap = android.provider.MediaStore.Images.Media.getBitmap(this.ctx.getContentResolver(), imageUri); 


ContentValues values = new ContentValues(); 
values.put(android.provider.MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); 
Uri uri = null; 
try { 
    uri = this.ctx.getContentResolver().insert(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 
} catch (UnsupportedOperationException e) { 
    uri = this.ctx.getContentResolver().insert(android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI, values); 
} 

// Add compressed version of captured image to returned media store Uri 

OutputStream os = this.ctx.getContentResolver().openOutputStream(uri); 
bitmap.compress(Bitmap.CompressFormat.JPEG, 20, os); 
os.close(); 

exif.createOutFile(getRealPathFromURI(uri, this.ctx)); 
exif.writeExifData(); 

bitmap.recycle(); 
bitmap = null; 
System.gc(); 
result = new PluginResult(Status.OK, uri.toString()); 

Это примерно та же логика, как использует PhoneGap. (Я удалил всю обработку исключений n для публикации. Поэтому предположим, что ошибок компиляции нет.) Итак, im в основном пытается извлечь Pic.jpg и вернуть его в мое приложение для телефонных разговоров.
НО что происходит, так это то, что im получает поврежденный файл abt 150kb, который даже не jpg (не открывается).


Пожалуйста, сообщите мне, возможно ли даже получить изображения таким образом после того, как действие, которое запустило камеру, умерло. И если это возможно, то что я делаю неправильно. Пожалуйста помоги!

ответ

0

Проблема была связана с некоторым измененным кодом в плагине FileTransfer Phonegap. Мне удалось получить изображение, сделанное камерой, после того как мое приложение перезапустилось после сбоя, используя только указанный выше код. :)

1

Как я уже говорил над вашей другой SO вопрос,

phonegap android app crashing due to low memory on opening camera

проблема, скорее всего, реализация Sony о намерении камеры. Вы должны попробовать протестировать, добавив приложение сторонней камеры, и когда вы сделаете снимок, выберите это приложение и посмотрите, не портится ли он. Вероятно, это не так.