2017-10-13 2 views
0

Ich versuche eine einfache Anwendung zu erstellen, die Bilder erfasst. Ich hatte erfolgreich die Anwendung bis Android M. ich die FileUriExposedException auf Android N konfrontiert, aber dann konnte ich es mit Hilfe dieser link lösen, die diesen Code vorgeschlagen `Android Kamera Bild Name

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

`

Dieses Stück Der Code speichert den Bild-in-Bilder-Ordner mit einer zufälligen 13-stelligen Ganzzahl als Bildname, zB: - 1507922385727.jpg. Ich habe versucht, die Datei Uri über Log.d() zu lesen, aber der Wert, der vom Log und dem Image-Namen zurückgegeben wurde, waren nicht gleich. Wie wird dieser Image-Name generiert? Wie speichere ich diesen Bildnamen, damit ich ihn über die Absicht weitergeben kann, das Bild in der nächsten Aktivität anzuzeigen? Zuletzt, wie erstelle ich einen Unterordner innerhalb der Bilder, wo ich diese Bilder anordnen könnte? PS: - Zuvor verwendete ich SimpleDateFormat, um einen TimeStamp als meinen Image-Namen zu erhalten, und ich erstellte den Ordner mit File-Klasse. GetImageName() gibt nur den Timestamp-Wert zurück. Hier ist der Code, den ich für die Vorgängerversion von Android verwendet habe. `

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

      } 

`

Antwort

1

Wie wird dieses Bild Name erzeugt wird?

Das ist bis zu MediaStore. Verwenden Sie Ihren ursprünglichen Code, aber verwenden Sie FileProvider, um den Zugriff auf den Speicherort der Datei zu ermöglichen und erhalten Sie Ihre Uri. Siehe this sample app für die Verwendung von FileProvider mit ACTION_IMAGE_CAPTURE.

+0

Danke. Die Kamera funktioniert. Außer jetzt bekomme ich IllegalArgumentException. – Gautam