Захват изображения Intent вызывает NullPointerException только на телефонах Samsung

Захват изображения Intent вызывает NullPointerException на телефонах Samsung.

Реализация ниже.

 final Button capture = (Button)findViewById(R.id.capture_button); capture.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST); } }); protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CAMERA_PIC_REQUEST) { Bitmap thumbnail = (Bitmap)data.getExtras().get("data"); ImageView image = (ImageView)findViewById(R.id.photoResultView); image.setImageBitmap(thumbnail); } } 

Я нашел исправление (не моя работа), которое заставляет его работать на устройствах Samsung. Блог с объяснением можно найти здесь .

Однако использование этого исправления для телефонов, отличных от Samsung, возвращает неправильное изображение, поэтому я бы использовал

 if(imageURI != null) { // do it the normal way else { // do it the "Samsung" way } 

Просто получил ту же проблему на Samsung S4 и выяснил, что добавление configChanges в AndroidManifest.xml решило проблему:

 <activity android:name=".YourActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="portrait" > </activity> Размер <activity android:name=".YourActivity" android:configChanges="orientation|keyboardHidden|screenSize" android:screenOrientation="portrait" > </activity> 

Вы можете проверить немного простой путь сюда, чтобы получить Ури.

Получить путь захвата камеры в андроид

Вызывающая камера

 Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(Intent.createChooser(cameraIntent,"Select Picture"), CAMERA_PIC_REQUEST1); 

По результативности

 final ContentResolver cr = getContentResolver(); final String[] p1 = new String[] { MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATE_TAKEN }; Cursor c1 = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, p1, null, null, p1[1] + " DESC"); if ( c1.moveToFirst() ) { String uristringpic = "content://media/external/images/media/" +c1.getInt(0); Uri newuri = Uri.parse(uristringpic); Log.i("TAG", "newuri "+newuri); } c1.close(); } 

Затем вы можете получить изображение захвата пути Uri

Получить путь захвата камеры в андроид

Получить путь захвата камеры в андроид

Вызывающая камера

 Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); startActivityForResult(Intent.createChooser(cameraIntent,"Select Picture"), CAMERA_PIC_REQUEST1); 

По результативности

 final ContentResolver cr = getContentResolver(); final String[] p1 = new String[] { MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATE_TAKEN }; Cursor c1 = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, p1, null, null, p1[1] + " DESC"); if ( c1.moveToFirst() ) { String uristringpic = "content://media/external/images/media/" +c1.getInt(0); Uri newuri = Uri.parse(uristringpic); Log.i("TAG", "newuri "+newuri); } c1.close(); 

То u может получить изображение захвата пути Uri

( Источник )