11

Ich muss die Bilder mit meiner App in einem bestimmten Ordner gespeichert speichern. Ich habe viele Lösungen für dieses Problem gelesen, aber ich konnte keine von ihnen arbeiten lassen, also bitte ich um Hilfe.Android - Speichern Sie Bilder in einem bestimmten Ordner

MainActivity.java

public void onClick(View v) { 

    Intent camera = new Intent(
      android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 

    //Folder is already created 
    String dirName = Environment.getExternalStorageDirectory().getPath() 
      + "/MyAppFolder/MyApp" + n + ".png"; 

    Uri uriSavedImage = Uri.fromFile(new File(dirName)); 
    camera.putExtra(MediaStore.EXTRA_OUTPUT, uriSavedImage); 
    startActivityForResult(camera, 1); 

    n++; 
} 

AndroidManifest.xml

<uses-permission android:name="android.permission.CAMERA" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+1

die Antworten hier auf diese Frage prüfen: http://stackoverflow.com/questions/12995185/android-taking-photos-and-saving-them- mit einem benutzerdefinierten Namen zu einem benutzerdefinierten Ziel – Razgriz

+0

Haben Sie überprüft, ob der Ordner wirklich erstellt wurde? – msana

+0

Schauen Sie sich den Link .. http://stackoverflow.com/questions/7887078/android-saving-file-to-external-storage/7887114#7887114 – Hariharan

Antwort

32

folgenden Code Gehen Sie durch, seine für mich gut funktioniert.

private void createDirectoryAndSaveFile(Bitmap imageToSave, String fileName) { 

    File direct = new File(Environment.getExternalStorageDirectory() + "/DirName"); 

    if (!direct.exists()) { 
     File wallpaperDirectory = new File("/sdcard/DirName/"); 
     wallpaperDirectory.mkdirs(); 
    } 

    File file = new File(new File("/sdcard/DirName/"), fileName); 
    if (file.exists()) { 
     file.delete(); 
    } 
    try { 
     FileOutputStream out = new FileOutputStream(file); 
     imageToSave.compress(Bitmap.CompressFormat.JPEG, 100, out); 
     out.flush(); 
     out.close(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 
+0

Wie bekomme ich ein Bitmap-Objekt mit meinem Bild? – Goblinch

+1

nehmen Sie ein Bild von der Kamera und schreiben Sie die Bitmap photo = (Bitmap) data.getExtras(). Get ("data"); in Aktivitätsergebnis. – mdDroid

+0

Ich habe gerade entdeckt, dass es ein Problem mit meinem Betriebssystem (Ubuntu) war. Es zeigte mir nicht die Bilder, aber sie waren im richtigen Ordner – Goblinch

5

Verwenden Sie so. Es wird für Sie arbeiten.

public void onClick(View v) { 
    Intent camera = new Intent(
    android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
    startActivityForResult(camera, 1); 
} 

protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 

    switch(requestCode) { 
    case 1: 
     if(resultCode == RESULT_OK) { 
     Uri selectedImage = imageReturnedIntent.getData(); 
     String[] filePathColumn = {MediaStore.Images.Media.DATA}; 

     Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); 
     cursor.moveToFirst(); 

     int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
     //file path of captured image 
     filePath = cursor.getString(columnIndex); 
     //file path of captured image 
     File f = new File(filePath); 
     filename= f.getName(); 

     Toast.makeText(getApplicationContext(), "Your Path:"+filePath, 2000).show(); 
     Toast.makeText(getApplicationContext(), "Your Filename:"+filename, 2000).show(); 
     cursor.close(); 

     //Convert file path into bitmap image using below line. 
     // yourSelectedImage = BitmapFactory.decodeFile(filePath); 
     Toast.makeText(getApplicationContext(), "Your image"+yourSelectedImage, 2000).show(); 

     //put bitmapimage in your imageview 
     //yourimgView.setImageBitmap(yourSelectedImage); 

     Savefile(filename,filePath); 
    } 
    } 
} 

public void Savefile(String name, String path) { 
    File direct = new File(Environment.getExternalStorageDirectory() + "/MyAppFolder/MyApp/"); 
    File file = new File(Environment.getExternalStorageDirectory() + "/MyAppFolder/MyApp/"+n+".png"); 

    if(!direct.exists()) { 
    direct.mkdir(); 
    } 

    if (!file.exists()) { 
    try { 
     file.createNewFile(); 
     FileChannel src = new FileInputStream(path).getChannel(); 
     FileChannel dst = new FileOutputStream(file).getChannel(); 
     dst.transferFrom(src, 0, src.size()); 
     src.close(); 
     dst.close(); 

     } catch (IOException e) { 
     e.printStackTrace(); 
     } 
    } 
    } 

Hoffe, das wird Ihnen helfen. als Referenz zur Verwendung camera Absicht.

+0

imageReturnedIntent.getData() gibt null zurück – amy

+0

@amy hast du das deklariert im Manifest – Nirmal

+0

Diese Lösung funktioniert für mich, seit android 4.4 Dateispeicherung wurde geändert. Es gibt ContextCompat.getExternalFilesDirs (Kontext, Name); http: //stackoverflow.com/questions/7887078/android-saving-file-to-external-storage – amy

2

Ich habe mdDroid den Code wie folgt verwendet:

public void startCamera() { 
    // Create photo 
    newPhoto = new Photo(); 
    newPhoto.setName(App.getPhotoName()); 

    //Create folder !exist 
    String folderPath = Environment.getExternalStorageDirectory() + "/PestControl"; 
    File folder = new File(folderPath); 
    if (!folder.exists()) { 
     File wallpaperDirectory = new File(folderPath); 
     wallpaperDirectory.mkdirs(); 
    } 
    //create a new file 
    newFile = new File(folderPath, newPhoto.getName()); 

    if (newFile != null) { 
     // save image here 
     Uri relativePath = Uri.fromFile(newFile); 
     Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
     intent.putExtra(MediaStore.EXTRA_OUTPUT, relativePath); 
     startActivityForResult(intent, CAMERA_REQUEST); 
    } 
} 
+0

Perfekt, warum ist das nicht an der Spitze – Ajay

Verwandte Themen