gpt4 book ai didi

Android 应用程序在方向更改期间丢失数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:21:50 25 4
gpt4 key购买 nike

我从教程中复制了一个应用程序,该应用程序使用 MediaStore.ACTION_IMAGE_CAPTURE 捕获图像。当我在手机上运行该应用程序时,我遇到了一些奇怪的事情。

即使我没有移动手机,相机应用程序本身也会在操作过程中翻转其方向几次。在返回教程应用程序之前,它会短暂进入横向模式。因此,教程应用程序在控制权返回给它后会翻转回纵向模式,并且图像会丢失。我尝试将相机 Activity 的方向设置为横向,图像没有丢失。

但应用程序的布局适用于纵向模式。或者,如果我在拍摄照片时横向握住相机,我可以在我的应用恢复对焦后转动手机,而不会丢失图像。

我在网上查了一些资料。 Stackoverflow 上有人提到方向的改变导致对 onCreate 的额外调用。 “调用 onCreate() 的原因是,当您在纵向期间调用相机 Activity 时,它会改变方向并破坏您之前的 Activity 。”我在 Debug模式下运行应用程序,并在 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);
}
}
}

这是我在这个 Activity 的 list 中的内容:

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

我进行了大量搜索,但我发现的大部分内容都缺乏具体示例。我需要知道代码是什么样子,而不仅仅是要使用什么功能。

我的手机是 LG Motion。还有其他人遇到过这个问题吗?如何修复?

最佳答案

在 list 中,在我使用 configChanges 的每个 Activity 中:

 <activity
android:name=".MainActivity"
android:configChanges="screenLayout|orientation|screenSize">

希望对您有所帮助。

关于Android 应用程序在方向更改期间丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15043222/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com