Как вызвать другое действие при съемке изображения с помощью пользовательского приложения камеры в Android?

Я реализовал приложение камеры с помощью некоторых учебных пособий, доступных в Интернете.

И я умею делать снимки, сохраняя их в отдельный каталог и сохраняя информацию в своей собственной базе данных. В этом случае я не показываю пользователю предварительный просмотр изображения.

Теперь мое требование — показать предварительный просмотр изображения с кнопками «Сохранить» и «Отмена» после съемки. Для этого я создал еще одно действие с ImageView и кнопками.

И в моей основной деятельности я делаю следующее.

cameraButton.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            camera.takePicture(shutterCallback, rawCallback, jpegCallback);
        }
});
........    
PictureCallback jpegCallback = new PictureCallback() {
        @Override
        public void onPictureTaken(byte[] imageData, Camera c) {
            Intent intent = new Intent(MyCameraActivity.this, SaveOrDiscardActivity.class);
            intent.putExtra("LOC_ATTRS", new double[]{dLatitude, dLongitude});
            intent.putExtra("IMG_DATA", imageData);
            startActivityForResult(intent, RESULT_OK);
            camera.startPreview();          
        }
    };

В моем классе SaveOrDiscardActivity я получаю данные и помещаю их в класс ImageView. Я могу правильно видеть предварительный просмотр.

Теперь у меня следующие вопросы.

1) Это хороший подход для вызова другого действия из метода onPictureTaken?

2) После нажатия кнопки камеры требуется определенное время (от 2 до 5 секунд), чтобы перейти к другому действию. Как исправить эту проблему?

Заранее спасибо.


person User 1034    schedule 11.02.2012    source источник


Ответы (2)


Вызовите камеру, используя следующий код:

Intent cameraIntent1 = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

File cameraImagefolder = new File(Environment.getExternalStorageDirectory() + "/phimages/");

if (!cameraImagefolder.isDirectory()) 
{
   cameraImagefolder.mkdirs();
 }  
 File file = new File(cameraimagename);
 Log.d("HI1", "camera image name" + cameraimagename);

 Uri outputFileUri = Uri.fromFile(file);
 cameraIntent1.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
 startActivityForResult(cameraIntent1, CAMERA_REQUEST);

Вызовите свой SaveOrDiscardActivity в методе onActivityForresult.

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {

      Intent intent = new Intent(MyCameraActivity.this, SaveOrDiscardActivity.class);
            intent.putExtra("LOC_ATTRS", new double[]{dLatitude, dLongitude});
            intent.putExtra("IMG_DATA", imageData);
            startActivityForResult(intent, RESULT_OK);
            camera.startPreview();      }
person Venkata Krishna    schedule 11.02.2012
comment
Intent вызов android.provider.MediaStore.ACTION_IMAGE_CAPTURE запустит системное приложение "Камера", чтобы сделать снимок. - person dumbfingers; 25.09.2012

После того, как я провел небольшое исследование PictureCallback, а также Activity, я обнаружил, что вам, возможно, потребуется внести небольшие изменения в зависимости от вашего кода.

Я предполагаю, что вам нужно использовать PictureCallback для передачи данных изображения обратно в его родительскую активность, верно?

Если это так, вы можете сначала вызвать использование вашей камеры startActivityForResult

Затем в вашей активности камеры используйте метод setResult(int resultCode, Intent data) в PictureCallback, например:

PictureCallback jpegCallback = new PictureCallback() {
    @Override
    public void onPictureTaken(byte[] imageData, Camera c) {
        ...
        if(getParent() == null) {
            setResult(RESULT_OK, data);
        } else {
            getParent().setResult(RESULT_OK, data);
        }
        finish(); 
        ...
// If you don't call finish() here 
//The current activity won't be terminated, you'll stay in the camera preview 
//but not go back to the parent activity.         
    }

Для получения дополнительной информации посетите официальный сайт разработчиков Android: Capture Picture и Действия

И если вы столкнулись с проблемами, из-за которых родитель не может получить результат, обратитесь к этому ответу здесь https://stackoverflow.com/a/2621390/763459

person dumbfingers    schedule 25.09.2012