J'essaie d'obtenir l'URI d'une photo prise avec le téléphone. J'essaye de convertir les données passées à "onActivityResult" en URI, puis convertis cet URI en une chaîne pour stocker dans ma base de données. Cette méthode fonctionne avec les vidéos, alors comment cela peut-il être réalisé avec une photo? Je reçois une exception de pointeur NULL lorsque j'essaie de convertir les données en URI. Dois-je utiliser une fonction différente pour convertir les données photo en URI? Mon code est le suivant:Android- Comment obtenir l'uri d'une photo prise
intention de bouton pour lancer l'enregistreur vidéo:
recordVideoButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startVideoFunction = new Intent();
startVideoFunction.setAction(MediaStore.ACTION_VIDEO_CAPTURE);
startActivityForResult(startVideoFunction, REQUEST_CODE_VIDEO);
}
});
intention de bouton pour lancer la capture photo:
takePhotosButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent startPhotoFunction = new Intent();
startPhotoFunction.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(startPhotoFunction, REQUEST_CODE_PHOTO);
}
});
méthode onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
try {
switch (requestCode) {
case REQUEST_CODE_VIDEO:
videoUri = data.getData();
String videoPath = videoUri.toString();
videoDB.addVideoRow(videoPath);
//displayVideo.setVideoURI(videoUri);
//displayVideo.start();
break;
case REQUEST_CODE_PHOTO:
photoUri = data.getData();
String photoPath = photoUri.toString();
videoDB.addPhotoRow(photoPath);
break;
}
}catch (NullPointerException e){
//prevent crash when returning with Null data to mainactivity.
}
}
MISE À JOUR onActivityResult:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent
data) {
// try {
switch (requestCode) {
case REQUEST_CODE_VIDEO:
videoUri = data.getData();
String videoPath = videoUri.toString();
videoDB.addVideoRow(videoPath);
//displayVideo.setVideoURI(videoUri);
//displayVideo.start();
break;
case REQUEST_CODE_PHOTO:
Bitmap photo = (Bitmap) data.getExtras().get("data");
Uri tempUri = getImageUri(getApplicationContext(), photo);
File finalFile = new File(getRealPathFromURI(tempUri));
String photoPath = finalFile.toString();
videoDB.addPhotoRow(photoPath);
break;
}
//}catch (NullPointerException e){
//prevent crash when returning with Null data to mainactivity.
//}
}
public Uri getImageUri(Context inContext, Bitmap inImage) {
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
return Uri.parse(path);
}
public String getRealPathFromURI(Uri uri) {
Cursor cursor = getContentResolver().query(uri, null, null, null, null);
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
return cursor.getString(idx);
}
Salut greenapps. Je regardais ça et je suis tombé sur putExtra EXTRA_OUTPUT. Je crois que cela ajoute juste le Uri de la photo à l'intention envoyée à onActivityResult, ce qui résoudrait le problème. Cependant, je ne sais pas comment ajouter le Uri avec putExtra, cela vous dérangerait-il de montrer comment le faire? –
Juste google pour des exemples. Il y en a des centaines sur ce site. Non, l'uri ne sera pas disponible en tant que paramètre du résultat onActivity. Vous devriez vous "souvenir" de l'uri utilisé. – greenapps
J'ai mais j'ai encore du mal à adapter ces exemples à mon code. N'ai-je pas besoin du fichier actuel pour ajouter l'Uri à l'intention? –