Моя камера Android Uri возвращает нулевое значение, но исправление Samsung на месте, помощь?

Поэтому я знаю о проблеме с камерой на устройствах Samsung. Вам нужно создать Uri, прежде чем вызвать камеру так:

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.TITLE, m_username); mImageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri); startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); 

В этом примере создается Uri для камеры для хранения данных. Мое приложение имеет функцию камеры в двух местах. Оба идентичны (прямая копия), но в одном mImageUri объект mImageUri становится нулевым во время процесса камеры, а в другом – нет. Последний работает отлично, но первый дает нулевое значение, которое, в свою очередь, мешает мне сохранять изображение, просматривать его и т. Д. Я предоставил код onResult ниже:

 case CAMERA_PIC_REQUEST : if(resultCode == RESULT_OK) { if(intent != null) { //For non-Samsung devices Log.e("Intent value:", intent.toString()); mImageUri = intent.getData(); } mAvatar = BitmapStatic.createImage(mImageUri, this); Drawable draw = new BitmapDrawable(getResources(), mAvatar); m_photoButtonE.setImageDrawable(draw); m_imageChanged = true; } break; 

Вышеприведенный пример относится к рабочей деятельности. Ниже приведена информация о том, что это не работает:

 //On pressing the "Take Photo" button: Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.TITLE, mUsername); mImageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); if(mImageUri == null) { Log.e("image uri is null", "what?"); } else { Log.e("oh nevermind", "image uri is NOT null"); } cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageUri); startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); //On Result: case CAMERA_PIC_REQUEST : if(resultCode == RESULT_OK) { if(intent != null) { Log.e("Intent value:", intent.toString()); mImageUri = intent.getData(); } else { Log.e("Intent is null", "yep it is."); if(mImageUri == null) { Log.e("nullcheck on memberimageuri", "its null"); } else { Log.e("nullcheckon memberimage", mImageUri.toString()); } } mImage = BitmapStatic.createImage(mImageUri, this); Drawable draw = new BitmapDrawable(getResources(), mImage); mPhotoPreview.setImageDrawable(draw); } break; 

Обратите внимание на файлы журнала, которые я разместил в этом втором примере. Когда я нажимаю кнопку «Take Picture», нулевая проверка объекта mImageUri возвращает true. Таким образом, этот объект не является нулевым. Но где-то во время процесса съемки это значение становится нулевым. Вторая проверка во время onResult () возвращает false. Опять же, это почти идентично моей настройке в другой деятельности, где она работает нормально.

Есть предположения?

После этого ваша деятельность будет уничтожена во время операции «Операция с камерой» и повторно создана. Вы должны использовать механизм onSaveInstanceState / onRestoreInstanceState в своей деятельности для сохранения URI изображения (и любых других данных) при перезапуске активности.

Как это:

 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); if (mImageUri != null) { outState.putString("cameraImageUri", mImageUri.toString()); } } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); if (savedInstanceState.containsKey("cameraImageUri")) { mImageUri = Uri.parse(savedInstanceState.getString("cameraImageUri")); } } 

Я могу предложить сначала создать начальный (временный) файл, а затем передать Uri в намерении. В функции «onActivityResult ()» у вас будет файл с заполненным изображением.

 File dir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "folderName"); dir.mkdirs(); if (dir.exists()) { try { imageFile = File.createTempFile("IMG_", ".jpg", dir); } catch (IOException e) { e.printStackTrace(); } } if (imageFile != null) { Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(imageFile)); activity.startActivityForResult(cameraIntent, REQUEST_CODE); } 
  • Android: наложение на просмотр камеры Android
  • Доступ к камере с iPhone SDK
  • Как получить доступ к камере мобильного устройства из веб-приложения?
  • Характеристики камеры iPhone 4 - Поле обзора / Вертикально-горизонтальный угол
  • Активность камеры, возвращающая нулевой андроид
  • objective камеры Android: как получить полноразмерную фотографию?
  • Камера в Android, как получить лучший размер, размер предварительного просмотра, размер изображения, размер изображения, искаженное изображение
  • Камера Android вращается
  • Как включить фронтальную вспышку программно в Android?
  • Фотосъемка с программным обеспечением на Android
  • Захват изображения без предварительного просмотра с помощью API камеры2
  • Давайте будем гением компьютера.