2016-09-21 3 views
0

Ich versuche das Bild zu lesen und anzuzeigen, das mit der Kamera Intent aufgenommen wurde. Mein Code basiert auf Beispiele in android docs gefunden:Mit der Kamera aufgenommenes Bild lesen Absicht

public void takeSidePhoto(View view) { 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) { 
     File photoFile = null; 
     try { 
      photoFile = createImageFile(REQUEST_IMAGE_CAPTURE_SIDE); 
     } catch (IOException ex) { 

     } 
     if (photoFile != null) { 
      Uri photoURI = FileProvider.getUriForFile(this, "my.app.package.fileprovider", photoFile); 
      imageSide = photoURI.toString(); 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 
      startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE_SIDE); 
     } 
    } 
} 

private File createImageFile(int imageCaptureCode) throws IOException { 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    String imageFileName = "JPEG_" + timeStamp + "_"; 
    File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES); 
    File image = File.createTempFile(
      imageFileName, /* prefix */ 
      ".jpg",   /* suffix */ 
      storageDir  /* directory */ 
    ); 
    return image; 
} 

Das Problem ist, dass die photoURI zu takePictureIntent geben wird (Beispiel): file:/storage/emulated/0/Android/data/my.app.package/files/Pictures/JPEG_20160921_123241_562024049.jpg Aber wenn ich meine Testgerätespeicher mit Dateimanager bin gerade, Ich kann sehen, dass das aufgenommene Bild gespeichert wird unter: file:/storage/Android/data/my.app.package/files/Pictures/JPEG_20160921_123241_562024049.jpg

Was passiert und wie bekomme ich den Pfad zur realen Datei?

+0

'FileProvider' nicht zurück' Uri' Werte mit einem 'file' Schema von' getUriForFile() '. Es gibt 'Uri'-Werte mit einem' content'-Schema zurück. Darüber hinaus erläutern Sie bitte genau, was "Dateimanager" Sie verwenden. – CommonsWare

Antwort

0

im Try-Block etwas tun, wie dies der Weg sollte

if(photoFile.exists()){ 
String path = photoFile.getAbsolutePath() 
} 
0

Die takeSidePhoto() -Methode folgenden Inhalt haben zu erhalten:

diese Linie File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     if (takePictureIntent.resolveActivity(getActivity().getPackageManager()) != null) { 
      File photoFile = null; 
      try { 
       photoFile = createImageFile(); 
       imageUri = Uri.fromFile(photoFile); 
      } catch (IOException ex) { 
       Toast.makeText(getActivity(), ex.toString(), Toast.LENGTH_SHORT).show(); 
      } 
      if (photoFile != null) { 
       takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
       startActivityForResult(takePictureIntent, CAMERA_REQUEST_CODE); 
      } 
     } else { 
      Toast.makeText(getActivity(), R.string.no_camera_error_message, Toast.LENGTH_SHORT).show(); 
     } 

Und in createImageFile() -Methode ändern

mit diesem File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);

0

Speicherverzeichnis mit dem folgenden Code abrufen und Bild im Pfad speichern.

String path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString(); 
Verwandte Themen