Проблема захвата изображения в HTC Mobile - PullRequest
2 голосов
/ 25 июля 2011

Я использую следующий код для захвата изображения в Android:

String fileName = "image.jpeg";
                //create parameters for Intent with filename
                ContentValues values = new ContentValues();
                values.put(MediaStore.Images.Media.TITLE, fileName);
                values.put(MediaStore.Images.Media.DESCRIPTION,"Image captured by camera");
                //imageUri is the current activity attribute, define and save it for later usage (also in onSaveInstanceState)
                imageUri = getContentResolver().insert(
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
                //create new Intent
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
                intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
                startActivityForResult(intent, CAMERA_PIC_REQUEST); 

После захвата изображения я использую следующий код для получения изображения:

protected void onActivityResult(int requestCode, int resultCode, Intent data) 
        {
            super.onActivityResult(requestCode, resultCode, data);
                            if( requestCode == CAMERA_PIC_REQUEST)
                {
                    if(resultCode == Activity.RESULT_OK)
                    {
                        if(imageUri == null)
                            imageUri = data.getData();
                        String filePath = getPath(imageUri);
                        UploadContentToServer(filePath, "image.jpeg");
                        //getBytesFromFile(filePath);
                    }
                }
}

Работает нормальнона всех устройствах, кроме HTC в альбомной ориентации.

Я использую режим портрет в своем приложении.Но когда я получаю изображение в ландшафтном режиме в моем HTC, я получаю imageUri null.Как решить эту проблему, это только в устройствах HTC.

Ответы [ 2 ]

2 голосов
/ 26 июля 2011

У меня была такая же проблема на моем galaxy s2 при попытке сделать снимок с помощью камеры. Попробуйте указать реальный путь в намерении, а затем укажите путь в вашем onActivityResult. Извлечение URI непосредственно из данных Intent также не помогло мне при захвате изображения.

Вот пример того, что я имею в виду:

 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd-HHmmss");
 fileName = dateFormat.format(new Date()) + ".jpg";
 File photo = new File(Environment.getExternalStorageDirectory(), fileName);
 Intent cameraintent = new Intent("android.media.action.IMAGE_CAPTURE");
 cameraintent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(photo));
 imageURICamera = Uri.fromFile(photo);
 startActivityForResult(cameraintent, 1);

А теперь снова получаем фото в onActivityResult:

 realPath = Environment.getExternalStorageDirectory() + "/" + fileName; 
0 голосов
/ 05 сентября 2012

Для HTC Desire HD работает следующий метод.

protected Uri createUriFromPhotoIntentForHtcDesireHD( Intent intent, Uri uri ) {
    FileOutputStream fos = null;
    try {
        Bitmap bitmap = (Bitmap) intent.getExtras().get( "data" );
        File outputDir = getCacheDir();
        File outputFile = File.createTempFile( "Photo-", ".jpg", outputDir );
        fos = new FileOutputStream( outputFile );
        bitmap.compress( Bitmap.CompressFormat.JPEG, 90, fos );
        uri = Uri.fromFile( outputFile );
    } catch ( IOException e ) {
        Ln.e( e, "Error creating temp file for HTC Desire HD" );
        e.printStackTrace();
    } finally {
        try {
            if ( fos != null ) {
                fos.close();
            }
        } catch ( IOException e ) {
            Ln.e( e, "Error closing temp file for HTC Desire HD" );
        }
    }
    return uri;
}
...