2016-09-13 3 views
2

Ich versuche, ein Foto mit der Standardkamera-App aufzunehmen und es in einem Speicher zu speichern, der nur für meine App sichtbar ist.Kann ein mit Standardkamera-App aufgenommenes Foto nicht speichern

public void startCamera(View view) 
{ 
    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    if (takePictureIntent.resolveActivity(getPackageManager()) != null) 
    { 
     File imageFile = null; 

     try 
     { 
      imageFile = createImageFile(); 
     } 
     catch (IOException ex) 
     { 
      ex.printStackTrace(); 
     } 

     if(imageFile != null) 
     { 
      Uri imageUri = FileProvider.getUriForFile(this, "vasiljevic.filip.secretnotes", imageFile); 
      takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); 
      startActivityForResult(takePictureIntent, 1); 
     } 
    } 
} 

createImageFile Methode:

private File createImageFile() throws IOException 
{ 
    String timeStamp = new SimpleDateFormat("yyyyddMM_HHmmss").format(new Date()); 
    EditText editText = (EditText) findViewById(R.id.txtNoteName); 
    String noteName = editText.getText().toString(); 
    String imageFileName = noteName + "_" + timeStamp; 
    File storageDir = new File(getFilesDir(), "images"); 
    if(!storageDir.exists()) 
    { 
     storageDir.mkdir(); 
    } 

    File image = File.createTempFile(imageFileName, ".jpg", storageDir); 

    return image; 
} 

Dies ist Teil des Manifests enthält FileProvider:

<provider 
     android:authorities="vasiljevic.filip.secretnotes" 
     android:name="android.support.v4.content.FileProvider" 
     android:exported="false" 
     android:grantUriPermissions="true"> 
     <meta-data 
      android:name="android.support.FILE_PROVIDER_PATHS" 
      android:resource="@xml/file_paths" /> 
    </provider> 

Und file_paths.xml:

<paths xmlns:android="http://schemas.android.com/apk/res/android"> 
<files-path name="my_images" path="images/"/> 
</paths> 

Nachdem ich ein Foto Es zeigt das Chaos an Alter "Kamera hat aufgehört", wenn ich es auf dem Emulator laufen lasse oder "Galerie hat aufgehört", wenn ich es auf einem echten Gerät laufen lasse. Später, wenn ich versuche, mit ACTION_VIEW Absicht darauf zuzugreifen, heißt es "kann Bild nicht öffnen", wenn ich es auf einem realen Gerät versuche oder wenn ich es auf dem Emulator versuche, verhält es sich so, als ob es ein Bild geöffnet hätte, aber der Bildschirm ist ganz schwarz und kein echtes Bild wird angezeigt.

Mache ich es richtig? Soll dieser Code das Bild korrekt speichern? Es basiert hauptsächlich auf der Erstellung von Fotos einfach offiziellen Android Tutorial: Taking photos simply

Antwort

2

Fügen Sie FLAG_GRANT_WRITE_URI_PERMISSION zu Intent hinzu. Ihre Drittanbieter-App hat derzeit keine Rechte, das Foto in Ihrem Uri zu speichern.

Wenn Sie ältere als Android 5.0 unterstützen, you might also need to use a ClipData workaround, wie Intent Flags wirken sich nicht auf EXTRA_OUTPUT auf älteren Android-Versionen.

+0

Ich versuchte es vorher mit diesem Flag und es hat nicht funktioniert, ich unterstütze ältere Versionen als 5.0, also werde ich diese ClipData Workaround überprüfen und sehen, ob es funktioniert, danke – Seviel

+0

ClipData funktioniert! – Seviel

Verwandte Themen