Как создать действие камеры, общее для всех устройств Android - PullRequest
0 голосов
/ 25 мая 2011

в моем приложении я хочу использовать камеру для захвата изображения и отправки на сервер.

Когда пользователь открывает часть «Камера» моего приложения, я хочу показать ему камеру по умолчанию устройства, которое он использует. В настоящее время следующий двухстрочный код, который я использую для захвата изображения

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
 startActivityForResult(intent, TAKE_RECEIPT);

Когда я запускаю этот код на устройстве HTC, после захвата изображения он показывает предварительный просмотр изображения с готовым и повторно нажимает кнопку . Когда я нажимаю done , он переходит к предыдущему действию.

когда я использую код в мото-устройстве, после захвата изображения он показывает предварительный просмотр изображения с вставкой, повторным захватом и отменой . Когда я нажимаю done , он переходит к предыдущему действию.

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

Как это сделать, пожалуйста, помогите мне ...

Ответы [ 3 ]

7 голосов
/ 25 мая 2011

Вы можете использовать приведенный ниже код для решения вашей проблемы ...

protected void startCameraActivity() 

{

    // TODO Auto-generated method stub
        Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE );
        intent.putExtra( MediaStore.EXTRA_OUTPUT, outputFileUri );

        startActivityForResult( intent, 0 );
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    {   
        switch( resultCode )
        {
            case 0:
                break;

            case -1:
                onPhotoTaken();
                break;
        }
    }

    protected void onPhotoTaken()
    {

        ///write code here what you want to done after capture the image using device camera
    }

    @Override 
    protected void onRestoreInstanceState( Bundle savedInstanceState)
    {
        if( savedInstanceState.getBoolean( add_project1.PHOTO_TAKEN ) ) 
        {
            onPhotoTaken();
        }
    }

    @Override
    protected void onSaveInstanceState( Bundle outState ) 
    {
        outState.putBoolean( add_project1.PHOTO_TAKEN, _taken );
    }
0 голосов
/ 15 декабря 2012

На самом деле проблема возникает, когда мы запускаем этот код на устройстве Google Nexus 1, поскольку он захватывает изображения, а затем, когда мы нажимаем кнопку «Готово», возникает исключение ... это нулевой указатель в Uri SelectedImage = data.getData ();

0 голосов
/ 25 мая 2011

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

Вы можете указать путь для сохранения вашего изображения при запуске намерения захвата:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(Environment.getExternalStorageDirectory(), "image.jpg");
outputFileUri = Uri.fromFile(file);
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
startActivityForResult(intent, TAKE_RECEIPT);

Затем вы можете обработать загрузку в свой onActivityResult:

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

    if (requestCode == TAKE_RECEIPT) {
        if (resultCode == Activity.RESULT_OK) {             
                // user took a picture, upload it
                // outputFileUri contains the uri to your file
                // you should delete it when the upload completes

        } else if (resultCode == Activity.RESULT_CANCELED) {
                //user canceled - do nothing
        }
    }
}
...