Mon appareil photo Android Uri renvoie une valeur nulle, mais la solution Samsung est-elle en place, aidez-vous?

Je suis donc conscient du problème de la caméra sur les appareils Samsung. Vous devez créer un Uri avant d'appeler l'intention de la caméra de la manière suivante:

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); 

Cet exemple crée un Uri pour la caméra pour stocker les données. Mon application a une fonction de caméra dans deux emplacements. Les deux sont identiques (pâte de copie directe), mais dans une activité, l'objet mImageUri devient nulle pendant le processus de la caméra, tandis que dans l'autre, il ne l'est pas. Ce dernier fonctionne bien, mais le premier donne une valeur nulle qui, à son tour, m'empêche de sauvegarder l'image, de la prévisualiser, etc. Je fournirai le code onResult ci-dessous:

  • Impossible de modifier l'API cible dans AVD Manager
  • Adaptateur générique pour plusieurs types de ligne de mise en page de listview dans Android
  • Puis-je initialiser Firebase sans utiliser google-services.json?
  • Comment exécuter l'application Android en arrière-plan
  • Comment puis-je rendre tamil unicode dans Android
  • Transformez AutoCompleteTextView en une recherche dans ActionBar à la place
  •  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; 

    L'exemple ci-dessus résulte de l'activité de travail. Voici l'activité où cela ne fonctionne pas:

     //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; 

    Notez les fichiers journaux que j'ai mis dans ce 2ème exemple. Lorsque je clique sur le bouton "Prendre l'image", la vérification nulle de l'objet mImageUri renvoie true. Donc, cet objet n'est pas nul. Mais quelque part au cours du processus de prise de vue, cette valeur devient nulle. Le 2ème contrôle pendant onResult () renvoie false. Encore une fois, c'est presque identique à mon installation dans l'autre activité, où ça marche bien.

    Des pensées?

    2 Solutions collect form web for “Mon appareil photo Android Uri renvoie une valeur nulle, mais la solution Samsung est-elle en place, aidez-vous?”

    Votre activité est détruite pendant l'opération d'activité de la caméra et elle a été recréée par la suite. Vous devez utiliser le mécanisme OnSaveInstanceState / onRestoreInstanceState dans votre activité pour préserver l'URI de l'image (et toute autre donnée) lors de la redémarrage de l'activité.

    Comme ça:

     @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")); } } 

    Je peux suggérer de créer le fichier initial (temporaire) au premier abord, puis passer l'Uri dans l'intention. Dans la fonction "onActivityResult ()", vous aurez le fichier avec l'image remplie.

     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); } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.