Die Lösung oben für mich funktioniert, aber mit geringfügigen Änderungen:
Das Bild von der Kamera angeklickt wird durch die ACTION_IMAGE_CAPTURE Absicht gespeichert. Während wir ein Bild aus der Galerie für unsere eigene App auswählen müssen, müssen wir das Image speichern, das von ACTION_PICK stammt. Speichern in diesem Fall ist im Grunde kopieren Bild aus der Galerie in Ihren eigenen App-Ordner nach dem Anzeigen in Ihrem ImageView.
Zuerst müssen Sie die Zieldatei haben: So die folgende Methode rufen Sie das Verzeichnis Ihrer App zu erhalten, die in Android ist> Daten> IHRE APP-Ordner> Dateien> Bilder:
private File mPhotoFile;
mPhotoFile=PhotoLab.get(getActivity()).getPhotoFile(mPhoto);
Hier ist die getPhotoFile() Funktion
public File getPhotoFile(Photo photo){
File externalFilesDir=mContext.getExternalFilesDir(Environment.DIRECTORY_PICTURES);//getExternalStorageDirectory().toString());
if(externalFilesDir==null){
return null;
}
return new File(externalFilesDir, photo.getPhotoFilename());
}
Jetzt haben Sie die Datei, in der Sie das Bild durch Bild Intent gepflückt speichern möchten. Rufen Sie jetzt die ACTION_PICK-Absicht auf.
private static final int PICK_IMAGE_REQUEST=2;
Intent pickIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); //Trying intent to pick image from gallery
pickIntent.setType("image/*");
Uri uriImagePath = Uri.fromFile(mPhotoFile);
pickIntent.putExtra(MediaStore.EXTRA_OUTPUT, uriImagePath);
startActivityForResult(pickIntent, PICK_IMAGE_REQUEST);
Nachdem das Ergebnis in onActivityResult Empfang meinen Code Es folgt:
if(requestCode==PICK_IMAGE_REQUEST){
Picasso.with(getActivity()).load(data.getData()).fit().into(mPhotoView);
File file=getBitmapFile(data);
try {
copyFile(file, mPhotoFile);
}catch(IOException e){
Toast.makeText(getActivity(),"Cannot use Gallery, Try Camera!",Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
}
Nach Abrufen der Daten, ich ging sie auf die nächste Methode Intent.ACTION_PICK den absoluten Pfad des aufgenommenen Bildes zu finden . Es folgt die Definition der Methode:
public File getBitmapFile(Intent data){
Uri selectedImage=data.getData();
Cursor cursor=getContext().getContentResolver().query(selectedImage, new String[]{MediaStore.Images.ImageColumns.DATA}, null, null, null);
cursor.moveToFirst();
int idx=cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
String selectedImagePath=cursor.getString(idx);
cursor.close();
return new File(selectedImagePath);
}
Nach dem Abrufen des absoluten Pfads des ausgewählten Bildes. Ich habe die Funktion copyFile() aufgerufen. Was ist wie folgt. Denken Sie daran, dass ich bereits meinen neuen Dateipfad erstellt habe.
public File getBitmapFile(Intent data){
Uri selectedImage=data.getData();
Cursor cursor=getContext().getContentResolver().query(selectedImage, new String[]{MediaStore.Images.ImageColumns.DATA}, null, null, null);
cursor.moveToFirst();
int idx=cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
String selectedImagePath=cursor.getString(idx);
cursor.close();
return new File(selectedImagePath);
}
Das Ziel für mich war mPhotoFile. Das haben wir zuerst generiert. Dieser gesamte Code funktioniert, wenn Sie ein Bild aus der Galerie auswählen und es speichern möchten, um es bei jedem Öffnen im imageView Ihrer App anzuzeigen.
Sie erstellen Ordner Ihres Projektnamens und Sie kopieren das Capture-Bild einfach in Ihren Projektnamenordner ???? Willst du zuerst klarstellen .. –
Dieses Thema kann Ihnen helfen: http://stackoverflow.com/questions/11846108/android-saving-bitmap-to-sd-card –
Die Utils.getPath() gibt den Speicherort, wo ich einen neuen Ordner zum Speichern erstellen möchte das Bild. Ruhe wird durch Absicht behandelt. Aber MediaStore.EXTRA_OUTPUT funktioniert nicht, wenn Sie ein Bild aus der Galerie auswählen. Wie kann ich das aus der Galerie ausgewählte Bild in einem anderen Ordner speichern? – AmeyaG