2017-10-13 10 views
0

J'essaie de créer une application simple qui capture des images. Je l'avais mis en œuvre avec succès l'application jusqu'à ce que Android M. I fait face au FileUriExposedException sur Android N mais je pourrais le résoudre avec l'aide de ce link qui a suggéré ce code `Nom de l'image de la caméra Android

capture_image.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Intent camera_intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       if(camera_intent.resolveActivity(getPackageManager())!=null){ 
        ContentValues values = new ContentValues(1); 
        values.put(MediaStore.Images.Media.MIME_TYPE,"image/jpg"); 
        fileUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,values); 
        camera_intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri); 
        camera_intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | 
              Intent.FLAG_GRANT_WRITE_URI_PERMISSION); 
        startActivityForResult(camera_intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE); 
       } 
       else { 
        Toast.makeText(Visitor_Details.this,"ERROR",Toast.LENGTH_LONG).show(); 
       } 
      } 
     }); 

`

Ce morceau de Le code stocke le dossier Image dans les images avec un entier aléatoire de 13 chiffres comme nom de l'image, par exemple: - 1507922385727.jpg. J'ai essayé de lire le fichier Uri via Log.d() mais la valeur retournée par le Log et le nom de l'image n'étaient pas les mêmes. Comment ce nom d'image est-il généré? Comment puis-je stocker ce nom d'image afin que je puisse le transmettre via l'intention d'afficher l'image dans l'activité suivante? Enfin, comment créer un sous-dossier à l'intérieur des images où je pourrais diriger ces images? PS: - Auparavant, j'utilisais SimpleDateFormat pour obtenir un TimeStamp en tant que mon nom d'image et j'ai créé le dossier en utilisant la classe File.The getImageName() retourne juste la valeur d'horodatage. Voici le code que j'ai utilisé pour la version précédente d'Android. `

btnCapture.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 



       Intent camIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       File imageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"Camera Test"); 
       String imageName = getImageName(); 
       File imagePath = new File(imageDir,imageName); 
       Uri imageUri = Uri.fromFile(imagePath); 
       camIntent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri); 
       startActivityForResult(camIntent,1); 

      } 

`

Répondre

1

Comment est ce nom d'image générées?

Cela correspond au MediaStore. Utilisez votre code original, mais utilisez FileProvider pour accéder à l'emplacement du fichier et obtenir votre Uri. Voir this sample app pour savoir comment utiliser FileProvider avec ACTION_IMAGE_CAPTURE.

+0

Merci. La caméra fonctionne. Sauf maintenant, je reçois IllegalArgumentException. – Gautam