L'application Android de perdre des données lors de changement d'orientation

J'ai une application que j'ai copié à partir d'un tutoriel qui capture une image avec MediaStore.ACTION_IMAGE_CAPTURE. J'ai obtenu une sorte de quelque chose d'étrange se passe quand je lance l'application sur mon téléphone.

L'application appareil photo en lui-même est en feuilletant son orientation une couple de fois au cours de l'opération, même si je ne suis pas en déplaçant le téléphone. Brièvement passe en mode paysage avant de retourner à l'tutoriel app. Par conséquent, le tutoriel app est repassez en mode portrait, une fois que le contrôle est retourné vers elle, et l'image est perdue. J'ai essayé de réglage de l'appareil photo de l'activité de l'orientation paysage, et l'image n'est pas perdu.

Mais la mise en page de l'application est prévu pour le mode portrait. Ou, si je tiens mon appareil photo en mode paysage lors de la capture de la photo, je peux tourner le téléphone après mon application est revenue à se concentrer, et ne pas perdre l'image.

J'ai fait un peu fouiller sur le web. Quelqu'un sur Stackoverflow mentionné que le changement dans l'orientation causé des appels supplémentaires onCreate. "La raison pour laquelle onCreate() est appelé est parce que lorsque vous faites appel à l'activité de la caméra lors de l'orientation en mode portrait, il va changer l'orientation et de détruire votre activité précédente." J'ai couru à l'application en mode de débogage avec points d'arrêt définis dans onCreate et dans le onActivityResult méthodes. Il est vrai que onCreate est appelé quand je prends la photo en mode portrait. L'ordre des appels est onCreate, onActivityResult, onCreate. Si je prends la photo en mode paysage (qui est où mon app photo se termine de toute façon), onCreate n'est pas appelé. Maintenant que j'ai une idée de ce qui se passe, comment puis-je empêcher que d'être un problème? Voici ce que l'application ressemble à ça:

package com.example.testapp;
import java.io.IOException;
import java.io.InputStream;
import android.app.Activity;
import android.app.WallpaperManager;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.ImageView;
public class CameraActivity extends Activity implements View.OnClickListener {
ImageButton ib;
Button b;
ImageView iv;
Intent i;
final static int cameraData = 0;
Bitmap bmp;
@Override
protected void onCreate(Bundle savedInstanceState) {
//TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.photo_activity);
initialize();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
//TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
setContentView(R.layout.photo_activity);
initialize();
}
private void initialize() {
iv = (ImageView)findViewById(R.id.imageViewReturnedPicture);
ib = (ImageButton)findViewById(R.id.imageButtonTakePicture);
b = (Button)findViewById(R.id.buttonSetWallpaper);
b.setOnClickListener(this);
ib.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.buttonSetWallpaper:
try {
WallpaperManager wm = WallpaperManager.getInstance(getApplicationContext());
wm.setBitmap(bmp);
} catch (IOException e) {
//TODO Auto-generated catch block
e.printStackTrace();
}
break;
case R.id.imageButtonTakePicture:
i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(i, cameraData);
break;
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
bmp = (Bitmap)extras.get("data");
iv.setImageBitmap(bmp);
}
}
}

Et voici ce que j'ai dans le manifeste pour cette activité:

 android:name="com.exemple.testapp.CameraActivity" 
android:label="Activité de la Caméra" 
android:configChanges="orientation" 
android:screenOrientation="portrait" 

J'ai fait beaucoup de recherche, mais beaucoup de ce que je trouve manque d'exemples concrets. J'ai besoin de savoir à quoi ressemble le code, pas seulement ce que la fonctionnalité à utiliser.

Mon téléphone est un LG Motion. Quelqu'un d'autre a ce problème? Comment peut-il être fixé?