Camera API调用会破坏父活动

时间:2014-12-22 09:27:04

标签: android camera

我正在编写一个Android应用程序,我接受表单中的数据,然后通过以下代码调用Android相机上传图像:

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    fileUri = getOutputMediaFileUri();

    intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri);

    // start the image capture Intent
    startActivityForResult(intent, CAMERA_CAPTURE_IMAGE_REQUEST_CODE);    

通话工作正常,相机图像成功返回。但问题出现在此之后。

我一直在测试2-3部手机,即: 1. Micromax a116 2.三星Galaxy Grand 小米

该应用程序在Micromax手机上运行良好。

三星手机出现问题,导致应用程序在轮换时崩溃。我在下面添加了Manifest,找到了解决方法:

android:configChanges="orientation|keyboardHidden|screenSize"    

但小米手机存在问题。它似乎总是称为" onCreate()"方法,每次相机意图返回图像。通过进行无根据的API调用,这会扰乱我之前从用户接受的表单数据。

我尝试通过以下代码覆盖onSaveInstanceState和onRestoreInstanceState:

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    // save file url in bundle as it will be null on scren orientation
    // changes
    outState.putParcelable("file_uri", fileUri);

}

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    // get the file url
    fileUri = savedInstanceState.getParcelable("file_uri");
}    

但永远不会调用onRestoreInstanceState。 感谢

1 个答案:

答案 0 :(得分:0)

这个SO Link详细说明了何时调用onRestoreInstanceState方法

为了快速参考,我将其从其他链接粘贴

当由于缺少资源而系统杀死Activity时,将触发onRestoreInstanceState(或onCreate中保存的bundle),并在您返回时重新启动。因此,如果你在前面开始一个新的Activity并回到之前的(你想要做的事情),活动A可能不会被杀死(只是停止)并重新启动而不通过onRestoreInstanceState。