13

我正在开发使用 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。我没有noHistoryflag AndroidManifest.xml。什么可能导致该问题?我可以避免在这里破坏我的活动吗?

4

4 回答 4

7

通常,当其他应用程序运行时,Android 会杀死您的 Activity。

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

要恢复 WebView 的状态,您可以使用 cookie 和会话并保存上次打开的 url。当重新创建活动时,只需导航 WebView 最后保存的 url 并处理来自相机的结果。

于 2013-06-21T11:12:27.243 回答
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);

参考:android中相机意图问题的图像

于 2013-06-28T05:23:08.033 回答
0

也许是一个愚蠢的建议。但是由于它被破坏了,这意味着设备内存不足。

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

例如,在您的活动的 onStop() 方法中,获取 webview 的内容并将其存储在某处。临时文件,sqlite,... 并在 onCreate 检查是否有缓存(也许它有多旧),如果需要,将其放入 webview 中。

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

于 2013-01-31T09:32:30.497 回答
0

如果我没有错,您正在从设备打开相机。您是否检查过其他应用程序没有获取相机?您必须在开始相机活动之前获取相机可能是使用相机实例的其他应用程序。您必须在销毁停止活动方法中释放相机实例,以便下次它可以用于其他应用程序使用它或供您的应用程序使用.

于 2013-06-27T12:44:08.170 回答