2013-03-18 17 views
5

Heute muss ich mit einer schwierigen Sache beschäftigen.Android speichern Kamerabild zu lokalen Speicher

Ich starte die Kamera und möchte so das aufgenommene Bild direkt in meinen internen Speicher speichern, ohne es hinein zu bewegen.

File targetDir = new File(getApplicationContext().getFilesDir()+File.separator+"PROJECTMAIN"+File.separator+"SUBFORDER"); 
    targetDir.mkdirs(); //create the folder if they don't exist 

    File externalFile = new File(targetDir, "picturename.jpg"); 
    Uri imageURI = Uri.fromFile(externalFile); 

    Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
    takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageURI); 
    startActivityForResult(takePictureIntent, actionCode); 

Es scheint, dass, wenn ich versuche, sie in den internen Speicher direkt zu speichern, die Kamera mein Klick auf den „OK“ -Knopf ignoriert, nachdem ich das Bild aufzunehmen. Ich denke, dass etwas mit der "internen" URI nicht stimmt, denn wenn ich anstelle von getApplicationContext().getFilesDir() für extra_output verwende, funktioniert alles gut, aber dann muss ich die Datei anschließend in den internen Speicher verschieben (der Bewegungsprozess funktioniert gut mit "getApplicationContext() .getFilesDir() ")

Die Kamera tut gerade nichts, wenn ich ein Foto mache und die OK-Taste drücke, um mit der internen URI fortzufahren ... Ich kann nicht glauben, dass das mit der Lagerung schwierig ist in Android.

Irgendwelche Ideen? vielleicht erlaubt die Kamera nur das Speichern von Bildern auf dem externen Speicher?

+0

beziehen Sie sich auf den Beitrag http://StackOverflow.com/Questions/12193607/How-to-save-capture-image-in-sdcard –

Antwort

3

Versuchen folgenden Code

File dir= context.getDir("dirname", Context.MODE_PRIVATE); //Creates Dir inside internal memory 
File file= new File(dir, "filename"); //It has directory details and file name 
FileOutputStream fos = new FileOutputStream(file); 
+0

Wenn diese Antwort Ihnen geholfen hat, bitte akzeptieren Sie diese Antwort .. – Aju

0

Für höhere Android-Version 7.0 verwenden diesen Code,

<application 
    ...> 
    <activity> 
    .... 
    </activity> 
    <provider 
     android:name="android.support.v4.content.FileProvider" 
     android:authorities="com.your.package.fileProvider" 
     android:grantUriPermissions="true" 
     android:exported="false"> 
     <meta-data 
      android:name="android.support.FILE_PROVIDER_PATHS" 
      android:resource="@xml/file_paths" /> 
    </provider> 
    </application> 

jetzt eine Datei im XML-Ressourcenordner erstellen,

<?xml version="1.0" encoding="utf-8"?> 
<paths> 
    <external-path path="Android/data/com.your.package/" name="files_root" /> 
    <external-path path="." name="external_storage_root" /> 
</paths> 

dann, wenn Gebrauch Für die Kamera verwenden Sie diese,

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
      intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
      Uri contentUri = FileProvider.getUriForFile(getContext(), "com.your.package.fileProvider", newFile); 
      intent.setDataAndType(contentUri, type); 
     } else { 
      intent.setDataAndType(Uri.fromFile(newFile), type); 
     } 
Verwandte Themen