MediaStore.EXTRA_OUTPUT rend les données nulles, un autre moyen de sauvegarder des photos?
Google propose cette polyvalente de code pour prendre des photos via une intention:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//create Intent to take a picture and return control to the calling application
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); //create a file to save the image
intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); //set the image file name
//start the image capture Intent
startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
}
Le problème est que si vous êtes comme moi et que vous souhaitez passer les photos en tant que figurants, à l'aide de EXTRA_OUTPUT
apparemment s'enfuit avec les données de photo et rend les actions ultérieures pense que l'intention de données est nulle.
Il semble c'est un gros bug avec Android.
Je suis en train de prendre une photo puis de les afficher sur une miniature dans un nouveau point de vue. J'aimerais l'enregistrer comme une image pleine grandeur dans le mode galerie. Quelqu'un sait-il un moyen de spécifier l'emplacement de l'image sans l'aide de EXTRA_OUTPUT
?
Voici ce que j'ai actuellement:
public void takePhoto(View view) {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE);
// takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);
startActivityForResult(takePictureIntent, CAMERA_REQUEST_CODE);
}
/** Create a file Uri for saving an image or video */
private static Uri getOutputMediaFileUri(int type){
return Uri.fromFile(getOutputMediaFile(type));
}
/** Create a File for saving an image or video */
@SuppressLint("SimpleDateFormat")
private static File getOutputMediaFile(int type){
File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES), "JoshuaTree");
if (! mediaStorageDir.exists()){
if (! mediaStorageDir.mkdirs()){
Log.d("JoshuaTree", "failed to create directory");
return null;
}
}
//Create a media file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
File mediaFile;
if (type == MEDIA_TYPE_IMAGE){
mediaFile = new File(mediaStorageDir.getPath() + File.separator +
"IMG_"+ timeStamp + ".jpg");
} else {
return null;
}
return mediaFile;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CAMERA_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
handleSmallCameraPhoto(data);
}
}
}
private void handleSmallCameraPhoto(Intent intent) {
Bundle extras = intent.getExtras();
mImageBitmap = (Bitmap) extras.get("data");
Intent displayIntent = new Intent(this, DisplayPhotoActivity.class);
displayIntent.putExtra("BitmapImage", mImageBitmap);
startActivity(displayIntent);
}
}
source d'informationauteur Jackson Flint-Gonzales | 2013-05-02
Vous devez vous connecter pour publier un commentaire.
Si vous avez spécifié MediaStore.EXTRA_OUTPUT, l'image sera écrit sur ce chemin, et pas de données sera donné à onActivityResult. Vous pouvez lire l'image de ce que vous avez spécifié.
Voir un autre résolu même question ici: Appareil photo Android : les données intention renvoie la valeur null
Ici est de savoir comment vous pouvez obtenir ce que vous voulez:
Edit:
Ajouter ces Manifester:
De départ de l'Api de 19 ans et au-dessus de READ_EXTERNAL_STORAGE doit être déclaré explicitement
à vous manifester.
Fondamentalement, il existe deux façons de récupérer l'image de la Caméra, si vous utilisez pour envoyer l'image capturée par le biais de l'intention extras vous ne pouvez pas le récupérer sur ActivityResult sur l'intention.getData ()", car il enregistre les données d'image à travers les extras.
L'idée est donc:
Et de la récupérer sur ActivityResults vérification de l'extrait de l'intention:
Essayer celui-ci
android.provider.MediaStore.EXTRA_OUTPUT
espère, permettra de résoudre votre bug. Le code suivant fonctionne pour moi:J'étais face à un même problème, à chaque fois que l'obtention de la valeur null lors de la récupération de données sur d'autres activités avec
getIntent().getData()
ensuite résolu par l'écriture complèteandroid.provider.MediaStore.EXTRA_OUTPUT
cela a résolu mon bug.