相机或图库意图会破坏某些设备上的旧活动

时间:2013-01-31 09:23:50

标签: android android-intent android-activity

我正在开发使用WebView显示其内容的应用程序。但是,它需要打开相机或图库才能选择图片:

    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(cameraIntent, 1);

    Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(galleryIntent, 2);

它在大多数设备上都能正常工作,但在HTC One和其他几个设备上,两个意图都会破坏我的活动,因此webview会在返回时重新加载。我在noHistory中没有AndroidManifest.xml标记。可能导致该问题的原因是什么?我可以避免破坏我在这里的活动吗?

4 个答案:

答案 0 :(得分:7)

通常情况下,Android会在其他应用运行时杀死您的活动。

您必须在onSaveInstanceState中保存活动状态,并在重新创建活动时恢复onRestoreInstanceState或onCreate中的状态。

要恢复WebView的状态,您可以使用Cookie和会话并保存上次打开的网址。重新创建活动时,只需导航WebView上次保存的URL并处理相机的结果。

答案 1 :(得分:1)

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, 1);

通过查看您的代码,我可以判断您的座右铭是捕获图像并在以后使用它。

这是一个已知的错误,解决方案是你需要为你的应用程序创建一个单独的文件夹,在捕获之前你需要确保创建文件和你给摄像头意图相同的路径

Uri uriSavedImage=Uri.fromFile(new File("/sdcard/seperate/newImage.png"));
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
cameraIntent.putExtra("output", uriSavedImage);
startActivityForResult(cameraIntent, 1);

参考:image from camera intent issue in android

答案 2 :(得分:0)

也许是一个愚蠢的消化。 但是因为它被破坏了,这意味着设备内存不足。

如果唯一的烦恼是webview重新加载,也许你可以通过缓存内容来解决这个问题?

例如,在您的onStop()方法中,您可以获取webview的内容并将其存储在某个位置。临时文件,sqlite,....并在onCreate中检查是否有缓存(可能有多久),如果需要,请将其放入webview中。

从webview获取HTML代码的教程:http://lexandera.com/2009/01/extracting-html-from-a-webview/

答案 3 :(得分:0)

如果我没错,你正在从设备上打开相机。您是否检查过其他应用程序未获取相机?您必须在开始相机活动之前获取相机可能是使用相机实例的其他应用程序。您必须在 on destroy onstop 活动方法中释放相机实例,以便下次可用时fr其他应用程序可以使用它或供您的应用程序使用。