/storage/emulated/0 auslesen?


Javandroid

Grünschnabel
Hallo zusammen,

Ich nehme in meiner App ein Photo auf und hole mir den Pfad via "Environment.getExternalStorageDirectory()" um das Bild abzuspeichern.
Mein Testgerät ist ein LG Nexus 4. Wenn Ich in der Gallery nachschaue ist das aufgenommene Bild nicht dort. Schau Ich hingegen im Dateibrowser nach, finde Ich das Bild. Wie bekomme Ich das Bild in die Gallery?
Warum findet das Programm das Bild nicht, schreibt es aber ja in den Storage?

Ich habe schon gegoogelt, finde jedoch leider keine Antwort wie ich dieses Problem handlen soll.
Hoffe mir kann hier jemand helfen.

Vielen Dank vorab.
 

Fabio Hellmann

Erfahrenes Mitglied
Hi,

du musst das Bild erst noch zum MediaStore hinzufügen.
Java:
MediaStore.Images.Media.insertImage(getContentResolver(), yourBitmap, yourTitle , yourDescription);
Viele Grüße
Fabio
 

Javandroid

Grünschnabel
Vielen Dank für deine Antwort. Leider klappt es immernoch nie wie geplant. Habe Ich den obenstehenden Code an der richtigen Stelle eingefügt?
Hier der Code-Snippet:

Java:
    private void selectImage() {

    final CharSequence[] options = { "Take Photo", "Choose from Gallery","Cancel" };

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Add Photo!");
    builder.setItems(options, new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int item) {

    if (options[item].equals("Take Photo"))
    {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    File f = new File(android.os.Environment.getExternalStorageDirectory(), "temp.jpg");

    intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(f));
    startActivityForResult(intent, 1);
    }
    else if (options[item].equals("Choose from Gallery"))
    {
    Intent intent = new  Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(intent, 2);
    }
    else if (options[item].equals("Cancel")) {
    dialog.dismiss();
    }
    }
    });
    builder.show();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK) {
    if (requestCode == 1) {
    File f = new File(Environment.getExternalStorageDirectory().toString());
    for (File temp : f.listFiles()) {
    if (temp.getName().equals("temp.jpg")) {
    f = temp;
    break;
    }
    }
    try {
    Bitmap bitmap;
    BitmapFactory.Options bitmapOptions = new BitmapFactory.Options();
    bitmap = BitmapFactory.decodeFile(f.getAbsolutePath(),
    bitmapOptions);
    
//    viewImage.setImageBitmap(bitmap);

    String path = android.os.Environment
    .getExternalStorageDirectory().toString();/*
    + File.separator
    + "Phoenix" + File.separator + "default";*/

/*Addition*/  MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "Testpic" , "Pic");

    
    f.delete();

    OutputStream outFile = null;

    File file = new File(path, String.valueOf(System.currentTimeMillis()) + ".jpg");

    try {
    outFile = new FileOutputStream(file);

    bitmap.compress(Bitmap.CompressFormat.JPEG, 85, outFile);
    
    String mCurrentPhotoPath = "file:" + file.getAbsolutePath();
/*
    Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    File f2 = new File(mCurrentPhotoPath);
    Uri contentUri = Uri.fromFile(f2);
    mediaScanIntent.setData(contentUri);
    this.sendBroadcast(mediaScanIntent);
    
*/  

    outFile.flush();
    outFile.close();

    } catch (FileNotFoundException e) {

    e.printStackTrace();

    } catch (IOException e) {

    e.printStackTrace();

    } catch (Exception e) {

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

    e.printStackTrace();
    }

    } else if (requestCode == 2) {

    Uri selectedImage = data.getData();

    String[] filePath = { MediaStore.Images.Media.DATA };

    Cursor c = getContentResolver().query(selectedImage,filePath, null, null, null);
    c.moveToFirst();

    int columnIndex = c.getColumnIndex(filePath[0]);

    String picturePath = c.getString(columnIndex);
    c.close();

    Bitmap thumbnail = (BitmapFactory.decodeFile(picturePath));

    Log.w("path of image from gallery......******************.........", picturePath+"");

//    viewImage.setImageBitmap(thumbnail);
    }
    }
    }
 

Fabio Hellmann

Erfahrenes Mitglied
Ich glaube nicht.
Vielleicht ist der Ansatz auch nicht ganz der Richtige. Ich habe auf der Android Developer Seite noch einen Beitrag gefunden, der genau dem entspricht, was du machen willst.
Ich vermute, dass das Hier der richtige Abschnitt für dich sein müsste.
 

Javandroid

Grünschnabel
Vielen Dank, wie könnte Ich dies denn in den obenstehenden Code einfügen?
Welcher Befehl aktuallisiert die Gallery denn?
 

Fabio Hellmann

Erfahrenes Mitglied
Nachdem du dein Foto gemacht hast und auf der SD-Karte gespeichert hast, fügst du anschließend diesen Code ein:
Java:
private void galleryAddPic(){
    Intent mediaScanIntent =new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
    File f =new File(mCurrentPhotoPath);
    Uri contentUri =Uri.fromFile(f);
    mediaScanIntent.setData(contentUri);
    this.sendBroadcast(mediaScanIntent);
}
Dieser Befehl sollte das Bild anhand des Pfades zur Gallery hinzufügen.