Примечание- , хотя я использую телефонную пробелу, вопрос не в этом.
Привет, я разрабатываю приложение для Android. мое приложение использует phonegap 1.3.
ми проблема ...
Я использую PhoneGap API, чтобы сделать снимок и отобразить его в моем приложении. Но это происходит по какой-то причине, поскольку ОС запускает мое приложение после запуска камеры, поэтому после нажатия фотографии мое приложение перезапускается, и оно не получает информацию о снятом изображении.
В качестве обходного пути к этой проблеме ( проблема ) я разработал плагин phonegap, который при запуске приложения проверяет, не произошло ли сбой приложения во время съемки (некоторые флаги в коде), и перезапускается ли он после сбоя он извлекает Pic.jpg, снятый камерой, и пытается отобразить его. Проблема в том, что он не может получить правильное изображение или даже правильный файл .jpg в этом отношении.
ми код ...
PhoneGap намерен запустить камеру и передает URI для 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 хранит картинку, которую пользователь делает в файле, который был создан с помощью 'photo' в приведенном выше коде. Таким образом, даже если после закрытия операционной системы приложение закрыто, когда камера открыта (см. - , проблема ), фотография будет храниться там. ПОЖАЛУЙСТА, поправьте меня, если это предположение неверно или фотография может быть сохранена в другом месте.
Поэтому, учитывая это предположение, я написал плагин, который извлекает это изображение, используя ту же логику, которую 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 для публикации. Итак, предположим, что нет ошибок компиляции n всех.) Итак, я в основном пытаюсь получить Pic.jpg и вернуть его в мое приложение phonegap.
НО происходит то, что я получаю поврежденный файл размером около 150 КБ, который даже не является jpg (не открывается).
Пожалуйста, скажите мне, возможно ли получить изображения таким способом после того, как камера запустила камеру, которая умерла. И если это возможно, то, что я делаю не так. Пожалуйста, помогите!