2013-03-18 22 views
5

Bugün zor bir şeyle uğraşmak zorundayım.Android, kamera görüntüsünü yerel ortama kaydetme

Kamerayı çalıştırıyorum ve çekilen görüntüyü içine taşımadan doğrudan dahili depolamaya kaydedin.

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

Ben dahili depolama alanına doğrudan kaydetmeyi deneyin eğer resmi çektikten sonra, kamera "Tamam" -tuşuyla benim tıklamayı ihmal gibi görünüyor. Ben "iç" URI ile yanlış bir şey olduğunu düşünüyorum, çünkü extra_output için getApplicationContext().getFilesDir() yerine Environment.getExternalStorageDirectory() kullanırsanız, her şey iyi çalışıyor, ancak daha sonra dosyayı iç depolama alanına taşımak zorundayım (hareket işlemi "getApplicationContext için iyi çalışıyor"() .getFilesDir() ")

Fotoğraf çektiğimde fotoğraf makinesi bir şey yapmıyor ve dahili URI'ye devam etmek için tamam düğmesine basıyor ... Depolama ile bunun çok zor olduğuna inanamıyorum Android'de.

Herhangi bir fikrin var mı? belki kamera sadece resimleri harici depolama birimine kaydetmeyi sağlıyor mu?

+0

http://stackoverflow.com/questions/12193607/how-to-save-capture-image-in-sdcard –

cevap

3

deneyin aşağıdaki Android 7.0 kullanım bu kod daha yüksek versiyonu için kod

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

adresine bakın. Bu cevap size yardımcı olduysa, lütfen bu cevabı kabul edin .. – Aju

0

, şimdi

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

xml kaynak klasöründe bir dosya oluşturmak,

<?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> 
sonra

zaman kullanımı kamera niyetinin kullanımı için,

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); 
     } 
İlgili konular