我写过的自定义相机应用程序停止在屏幕锁定后进行预览(通过按下锁定按钮或等待几分钟)。我没有得到例外,这使得很难找到问题。
Android屏幕锁定(如果这是正确的术语)暂停/暂停/ ...我的应用程序(活动)?
如果是这种情况,原因可能是我的onPause / onResume方法吗?或者可能是另一个原因吗?
提前致谢
答案 0 :(得分:31)
我遇到了同样的问题并使用以下步骤修复了它:
我创建了相机预览并将其添加到父活动的onResume()容器FrameLayout中。类似的东西:
public void onResume{
super.onResume();
mCamera = Camera.open();
if(null != mCamera){
mCamera.setDisplayOrientation(90);
mPreview = new CameraOverlay(getActivity(), mCamera);
frLyParent.addView(mPreview);
}
}
我删除了onPause()中的视图。这可以解决冻结现象。
public void onPause(){
super.onPause();
if(null != mCamera){
mCamera.release();
mCamera = null;
}
frLyParent.removeView(mPreview);
mPreview = null;
}
其中CameraOverlay()是扩展SurfaceView并实现SurfaceHolder.Callback的类。如果您需要实施,请告诉我。
答案 1 :(得分:7)
这是我的,它确实有效: - )
@Override
public void onResume() {
super.onResume();
try {
camera = Camera.open();
holder.addCallback(this);
surface.setVisibility(View.VISIBLE);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void onPause() {
try {
surface.setVisibility(View.GONE);
holder.removeCallback(this);
camera.release();
} catch (Exception e) {
e.printStackTrace();
}
super.onPause();
}
答案 2 :(得分:4)
谢谢,我使用了这个的修改,它也适用于我
在打开相机之前,我在mPreview.removeView(mPreview.mSurfaceView);
中添加了onpause()
,在mPreview.addView(mPreview.mSurfaceView);
中添加了onResume()
。
我还在预览课程中删除了addView(mSurfaceView);
。
答案 3 :(得分:3)
在onResume()
方法中添加以下行:
surfaceView.setVisibility(View.VISIBLE);
在onPaused()
方法中添加以下行:
surfaceView.setVisibility(View.GONE);