Как вызвать другое действие при съемке с помощью пользовательского приложения камеры в Android? - PullRequest
0 голосов
/ 11 февраля 2012

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

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

Теперь мое требование - показать предварительный просмотр изображения с помощью кнопок Сохранить и Отменить после съемки изображения.Для этого я создал еще одно действие с 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 секунд), чтобы перейти к другому занятию.Как решить эту проблему?

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

Ответы [ 2 ]

0 голосов
/ 25 сентября 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: Захват изображения и активность

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

0 голосов
/ 11 февраля 2012

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

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();      }
...