我有两项活动(A1,A2)。 A1调用A2,从A2调用相机意图如下
launchIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
launchIntent.putExtra(MediaStore.EXTRA_OUTPUT,photoPath);
startActivityForResult(launchIntent,CAMERA_REQUEST);
打开相机,我可以拍照。但是一旦我点击了保存按钮(s3中的勾选按钮),问题就出现了,我的 onActivityResult 没有被调用,而是调用了A2的onDestroy方法。我在onActivityResult fn中完成的逻辑很少。
我已经阅读了Stackoverflow中关于此的一些帖子,但我无法从中得到有用的输出。我的第二个活动(A2)中有我的清单
android:configChanges="keyboardHidden|orientation|locale"
android:screenOrientation="portrait
注意:在HTC One X中,我的onActivityResult fn被调用,但在我的S3中,第二个Activity(A2)被破坏了
Plz分享您对此的看法。在此先感谢
答案 0 :(得分:79)
我有同样的问题。我会疯了但最后我找到了解决方案here。 问题是当你点击相机的“保存”按钮时,活动调用改变方向方法,它将被破坏并重新创建。 尝试设置
android:configChanges="orientation|screenSize"
(不仅android:configChanges="orientation"
,因为建议here,它不适用于API级别13或更高级别。)
它可以防止破坏活动,它对我有用。
答案 1 :(得分:35)
启动相机需要大量内存。因此,在具有低内存的设备上,android系统会关闭在后台运行的Activities,因此会调用onCreate()。 由于你给出的这个photopath变成了null,你将无法获得保存的图像。
解决方法是在系统破坏您的活动时保存photopath,然后再次恢复。
@Override
public void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
outState.putString("photopath", photopath);
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
// TODO Auto-generated method stub
if (savedInstanceState != null) {
if (savedInstanceState.containsKey("photopath")) {
photopath = savedInstanceState.getString("photopath");
}
}
super.onRestoreInstanceState(savedInstanceState);
}
如果您在Fragment上执行此操作。
@Override
public void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
outState.putString("photopath", photopath));
super.onSaveInstanceState(outState);
}
@Override
public void onViewStateRestored(Bundle savedInstanceState) {
// TODO Auto-generated method stub
if (savedInstanceState != null) {
if (savedInstanceState.containsKey("photopath")) {
photopath = savedInstanceState.getString("photopath");
}
}
super.onViewStateRestored(savedInstanceState);
}
答案 2 :(得分:23)
请确保您没有启用“不要保持活动”开发人员设置,因为它会破坏您要离开的活动。
答案 3 :(得分:13)
相机应用程序需要大量内存并释放内存,操作系统必须杀死后台应用程序,包括你的应用程序。这对所有Android应用都是正常的。当相机应用程序返回时,您的活动将被重新创建。要保留活动状态信息,请覆盖onSaveInstanceState()
以存储您的数据,并在onCreate()
中将其读回。
答案 4 :(得分:1)
当我调用Camera Intent时,我的Activity有很多任务在运行。 我有GPS位置监听器,还有更多任务。
当它从Camera Intent返回时,我需要在拍摄图像的位置的地图上添加标记。 因此,如果用户拍摄了多张照片,则应显示每张照片的标记。
如果每次我调用Camera Intent时它都会破坏我的Activity,那么我之前所有关于标记及其位置的信息都会丢失。 而且,我将不得不再次初始化地图。这对我的应用来说是个大问题。
是的,只有当我在风景模式下拍照时才会发生。如果我拍摄肖像照片到目前为止一切都很好..
我会尝试使用android:configChanges="orientation|screenSize"
正如这里所说..希望它会有所帮助!
答案 5 :(得分:1)
对我来说,当我在开发人员模式下启用名为“ 不要保留活动”的选项时,就会发生这种情况。在我取消选中它之后,从图库或相机应用程序中选择图片作为支持将不会重新创建活动。