Java 三星Galaxy Tab 7.0从照相/摄像机返回时重新启动应用程序

Java 三星Galaxy Tab 7.0从照相/摄像机返回时重新启动应用程序,java,android,galaxy-tab,Java,Android,Galaxy Tab,我的代码在更小和更大的设备(摩托罗拉Xoom、三星Galaxy Player 4.0、京瓷Digno)上都能像预期的那样工作,但对于三星Galaxy Tab 7.0,在启动ACTION\u IMAGE\u CAPTUREintent并拍照后,当应用程序返回onDestroy()时,会调用onCreate(),然后调用onActivityResult(),最后再次调用onDestroy()和onCreate(),这当然是不希望的-只应调用onActivityResult() 可能的线索: Gal

我的代码在更小和更大的设备(摩托罗拉Xoom、三星Galaxy Player 4.0、京瓷Digno)上都能像预期的那样工作,但对于三星Galaxy Tab 7.0,在启动
ACTION\u IMAGE\u CAPTURE
intent并拍照后,当应用程序返回
onDestroy()
时,会调用
onCreate()
,然后调用
onActivityResult()
,最后再次调用
onDestroy()
onCreate()
,这当然是不希望的-只应调用
onActivityResult()

可能的线索:

  • Galaxy Tab 7.0的屏幕尺寸在清单文件中不受支持(这是我测试过的唯一一个屏幕尺寸不受支持的设备),因此用户可以选择使用scretch进行调整,也可以选择zoom进行调整。两个UI都有相同(不好)的行为
  • 预览图片时,相机活动似乎会切换方向。我的应用程序只支持纵向模式(编辑:在较小的屏幕上-在非xlarge屏幕上,它支持方向更改)。也许方向的改变在某种程度上破坏了我的活动
  • 我尝试过从不同的目的(电子邮件目的)启动和返回,在这种情况下,我的应用程序不会被销毁和重新创建
如果需要更多信息或代码示例,请告诉我


编辑:问题已缩小为方向更改。根据Karthik的回答,设置
android:configChanges=“orientation”
可以解决这个问题。唯一的问题是,我的应用程序支持在xlarge屏幕上改变方向。此设置会中断这些设备上的此功能。我尝试过使用android:configChanges=“@string/config\u changes”并根据屏幕大小提供不同的字符串,但现在我遇到了“安装错误:安装解析失败\u意外异常”。根据这一点,没有办法以编程方式设置它。我唯一可以手动处理应用程序中所有方向更改的选项是什么?

你说得对,这是由于方向更改造成的。相机在Galaxy选项卡中以横向模式工作。
因此,您可以将
android:configChanges=“orientation”
添加到manifiest文件中的
标记中


这会解决你的问题
onDestroy()
onCreate()
在从相机返回时将不会被调用。

你说得对,这是由于方向改变。相机在Galaxy选项卡中以横向模式工作。
因此,您可以将
android:configChanges=“orientation”
添加到manifiest文件中的
标记中


这会解决你的问题
onDestroy()
onCreate()
从摄像头返回时将不会被调用。

我发现我的应用程序重新启动的原因是,启动摄像头应用程序时设备内存不足,操作系统回收了我的主要活动。这不会是一个问题,除非我有一个基于片段的布局,并且在
onCreate()
中进行了一些片段初始化,而不管savedInstanceState如何。这导致自动片段恢复被丢弃,并使应用程序看起来像是从一开始就重新启动,而实际上它只是试图恢复

例:


我发现我的应用程序重新启动的原因是,启动摄像头应用程序时,设备内存不足,操作系统回收了我的主要活动。这不会是一个问题,除非我有一个基于片段的布局,并且在
onCreate()
中进行了一些片段初始化,而不管savedInstanceState如何。这导致自动片段恢复被丢弃,并使应用程序看起来像是从一开始就重新启动,而实际上它只是试图恢复

例:


根据这一点,您可能还需要添加
屏幕大小
。谢谢,这很有帮助。但这引发了另一个问题。请查看我的编辑,您可能还需要添加
屏幕大小
。谢谢,这帮了大忙。但这引发了另一个问题。请参阅我的编辑。对于xlarge屏幕,我猜您必须手动处理活动中的方向更改。或者为xlarge设备分离APK(进行最复杂的更改)。我想您必须手动处理xlarge屏幕活动中的方向更改。或为xlarge设备分离APK(进行最复杂的更改)。
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // add main menu -- WRONG!
    MainMenuFragment mainMenu = new MainMenuFragment();
    FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction();
    ft.add(R.id.contents, mainMenu);
    ft.commit();

    if (savedInstanceState != null) {
        // <restore state>
    }
    else {
        // <initialize stuff>
    }
}
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (savedInstanceState != null) {
        // <restore state>
    }
    else {
        // <initialize stuff>

        // add main menu -- CORRECT!
        MainMenuFragment mainMenu = new MainMenuFragment();
        FragmentTransaction ft = this.getSupportFragmentManager().beginTransaction();
        ft.add(R.id.contents, mainMenu);
        ft.commit();
    }
}