【发布时间】:2015-04-29 04:29:39
【问题描述】:
我的应用程序控制着相机,最近有很多设备无法打开相机的崩溃报告。按下后退按钮会释放相机,但也会禁用背景模式。按下主页按钮不会释放相机,打开相机时会导致崩溃,但会启用后台模式。
相机应用程序本身打开时如何释放相机?
【问题讨论】:
我的应用程序控制着相机,最近有很多设备无法打开相机的崩溃报告。按下后退按钮会释放相机,但也会禁用背景模式。按下主页按钮不会释放相机,打开相机时会导致崩溃,但会启用后台模式。
相机应用程序本身打开时如何释放相机?
【问题讨论】:
当您在您的 android 应用程序中使用 android 硬件相机时,您应该释放它以便其他应用程序或您的应用程序可以使用它。 在移动到应用中的另一个活动之前释放相机是一种很好的做法。
使用下面的代码 -
protected void onDestroy(){
if(camera!=null){
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
}
}
以上代码将释放硬件摄像头,您使用Camera.open()打开它;方法。
如果您有自定义预览,则必须在 surfaceDestroyed 方法中使用 -
public void surfaceDestroyed(SurfaceHolder holder) {
if(camera!=null){
camera.stopPreview();
camera.setPreviewCallback(null);
camera.release();
camera = null;
}
}
希望对你有所帮助。
【讨论】:
onDestory)。
当调用相关Activity的onPause()时释放相机被认为是安全的做法。与此一致,我鼓励不要将活动的 Camera 对象从一个 Activity 传递到另一个 Activity。我经常使用 Fragments 来更改 UI,同时保持相机处于活动状态。
有一些特殊情况,当应用程序必须在 onPause() 之后使用相机时,请参阅例如Detect when another app tries to use the camera。并非在所有情况下这都是可能的,但绝不是容易处理的。
【讨论】: