Android-приложение теряет данные во время изменения ориентации

у меня есть приложение, которое яскопировал из учебника, который захватывает изображение сMediaStore.ACTION_IMAGE_CAPTURE, Я'когда я запускаю приложение на своем телефоне, происходит какая-то странность.

Само приложение камеры меняет ориентацию пару раз во время работы, хотя я не двигаю телефон. Он кратко переходит в ландшафтный режим, прежде чем вернуться в учебное приложение. Следовательно, учебное приложение переходит обратно в портретный режим после того, как элемент управления возвращается к нему, и изображение теряется. Я пытался установить активность камеры "s ориентация на ландшафт, и изображение не теряется.

Но макет приложения предназначен для портретного режима. Или, если я держу камеру в альбомной ориентации во время захвата фотографии, я могу повернуть телефон после того, как мое приложение вернулось в фокус, и не потерять изображение.

Я немного покопался в Интернете. Кто-то в Stackoverflow упомянул, что изменение ориентации вызвало дополнительные вызовы. "onCreateПричина того, чтоonCreate() Это вызвано тем, что когда вы вызываете действие камеры во время портретной ориентации, оно изменит ориентацию и разрушит вашу предыдущую активность. " Я запустил приложение в режиме отладки с точками останова, установленными в onCreate и вonActivityResult методы. Это правда, чтоonCreate вызывается, когда я делаю фотографию в портретном режиме. Порядок вызовов: onCreate, onActivityResult, onCreate. Если я сделаю снимок в ландшафтном режиме (где мое приложение камеры в любом случае заканчивается), onCreate не будет вызван. Теперь, когда у меня есть представление о том, что происходит, как мне избежать проблемы? Вот'Как приложение выглядит сейчас:

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);
        }
    }
}

И здесь'Что я имею в манифесте для этой деятельности: я

                android:name="com.example.testapp.CameraActivity"
                android:label="Camera Activity"
                android:configChanges="orientation"
                android:screenOrientation="portrait" 

мы проделали значительный поиск, но многое из того, что я нашел, не содержит конкретных примеров. Мне нужно знать, как выглядит код, а не только какую функцию использовать.

Мой телефон LG Motion. Кто-нибудь еще сталкивался с этой проблемой? Как это можно исправить?

Ответы на вопрос(7)

Ваш ответ на вопрос