活动com.ui.MapViewer泄露了最初添加到此处的窗口android.widget.PopupWindow

时间:2014-05-04 15:43:37

标签: android android-layout android-intent android-camera android-popupwindow

我正在做一个android地图,我在地图中使用mapsforge有一些点,地图上的每个点都保存在一个空间数据库中。之后,地图上的每次单击都会打开一个自定义PopUp窗口,该窗口将当前活动作为上下文接收,其中包含有关可在数据库上编辑和更新的点的所有信息。现在,我已经在弹出窗口中添加了一个按钮,名称为"拍照"单击何时执行以下操作:

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(mapViewer.getPackageManager()) != null) {
takePictureIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
mapViewer.startActivityForResult(takePictureIntent, 1);
}

在我拍摄照片后保存它们应该返回到我之前的地图活动,弹出窗口打开就像之前我点击按钮在弹出窗口中拍照但我收到以下错误:

  

E / WindowManager(15089):android.view.WindowLeaked:Activity   com.ui.MapViewer泄露了窗口   android.widget.PopupWindow$PopupViewContainer@4281bc98那是   最初添加在这里

为什么会这样?我无法理解!之后,我尝试创建我的自定义活动实现相机api只有一个按钮拍照,然后从我的弹出窗口开始此活动,并在拍照后调用活动的完成(),这样我就不会#39; t收到任何错误。然而,这对我来说不是一个解决方案,因为我需要在相机应用程序中进行缩放和闪光。

我的弹出窗口实现在以下pastebin中:

http://pastebin.com/9hHgSrUH

任何人都可以帮我解决这个严重的问题吗?

最好的问候

编辑:我在拍摄照片后点击保存后,检测到堆栈中活动的onDestroy被调用。但为什么要被摧毁?我没有打电话。

1 个答案:

答案 0 :(得分:0)

问题可能是相机应用程序在拍摄照片后更改了屏幕方向,并且您的主要活动被销毁并再次创建。

尝试

android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"