0
當我的活動進入後臺時,如何釋放相機? (例如通過按電話上的待機按鈕)Android:活動進入後臺時如何使用相機?
public void onPause(){
super.onPause();
if (cam != null) {
cam.stopPreview();
cam.release();
cam = null;
}
}
@Override
protected void onResume(){
super.onResume();
rLayout = (RelativeLayout) findViewById (R.id.layout_background);
cam = Camera.open();
cam.startPreview();
p = cam.getParameters();
}
logcat的:
02-20 11:46:40.040: E/AndroidRuntime(26439): FATAL EXCEPTION: main
02-20 11:46:40.040: E/AndroidRuntime(26439): java.lang.RuntimeException: Unable to resume activity {spicysoftware.spicytaschenlampe/spicysoftware.spicytaschenlampe.FlashLight}: java.lang.RuntimeException: Fail to connect to camera service
02-20 11:46:40.040: E/AndroidRuntime(26439): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2616)
02-20 11:46:40.040: E/AndroidRuntime(26439): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2644)
02-20 11:46:40.040: E/AndroidRuntime(26439): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2130)
02-20 11:46:40.040: E/AndroidRuntime(26439): at android.app.ActivityThread.access$600(ActivityThread.java:140)
02-20 11:46:40.040: E/AndroidRuntime(26439): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
02-20 11:46:40.040: E/AndroidRuntime(26439): at android.os.Handler.dispatchMessage(Handler.java:99)
02-20 11:46:40.040: E/AndroidRuntime(26439): at android.os.Looper.loop(Looper.java:137)
02-20 11:46:40.040: E/AndroidRuntime(26439): at android.app.ActivityThread.main(ActivityThread.java:4898)
02-20 11:46:40.040: E/AndroidRuntime(26439): at java.lang.reflect.Method.invokeNative(Native Method)
02-20 11:46:40.040: E/AndroidRuntime(26439): at java.lang.reflect.Method.invoke(Method.java:511)
02-20 11:46:40.040: E/AndroidRuntime(26439): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1008)
02-20 11:46:40.040: E/AndroidRuntime(26439): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:775)
02-20 11:46:40.040: E/AndroidRuntime(26439): at dalvik.system.NativeStart.main(Native Method)
02-20 11:46:40.040: E/AndroidRuntime(26439): Caused by: java.lang.RuntimeException: Fail to connect to camera service
02-20 11:46:40.040: E/AndroidRuntime(26439): at android.hardware.Camera.native_setup(Native Method)
02-20 11:46:40.040: E/AndroidRuntime(26439): at android.hardware.Camera.<init>(Camera.java:353)
02-20 11:46:40.040: E/AndroidRuntime(26439): at android.hardware.Camera.open(Camera.java:330)
02-20 11:46:40.040: E/AndroidRuntime(26439): at spicysoftware.spicytaschenlampe.FlashLight.onResume(FlashLight.java:182)
02-20 11:46:40.040: E/AndroidRuntime(26439): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1199)
02-20 11:46:40.040: E/AndroidRuntime(26439): at android.app.Activity.performResume(Activity.java:5280)
02-20 11:46:40.040: E/AndroidRuntime(26439): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2606)
02-20 11:46:40.040: E/AndroidRuntime(26439): ... 12 more
這是如何其工作:
public void onPause(){
super.onPause();
Log.v("OnPause", "True");
if (cam != null) {
Log.v("OnPause", "Cam isn't null");
cam.stopPreview();
Log.v("OnPause", "CamPreview stopped");
cam.release();
Log.v("OnPause", "CamReleased");
cam = null;
Log.v("OnPause", "Cam is null");
}
}
@Override
protected void onResume(){
super.onResume();
Log.v("OnResume", "True");
if(cam != null){
Log.v("OnResume", "Camera is in use");
} else {
Log.v("OnResume", "Camera isn't in use");
rLayout = (RelativeLayout) findViewById (R.id.layout_background);
cam = Camera.open();
Log.v("OnResume", "Camera has been opened");
cam.startPreview();
Log.v("OnResume", "CamPreview started");
p = cam.getParameters();
Log.v("OnResume", "Wrote parameters to variable p");
}
}
打開相機中的onResume不崩潰該應用。
問候 MSeiz5
感謝您的快速回答。請檢查我的onResume和我添加的logcat。它在cam = Camera.open();我不知道爲什麼... – 2013-02-20 10:48:46
你在別的地方打開過相機嗎?如果否,請嘗試重新啓動您的設備。 native_setup中的連接錯誤通常是由未發佈的相機發生的。 – StarPinkER 2013-02-20 11:59:19
你可以放一些更多的日誌,包括由CameraService等寫的日誌。 – StarPinkER 2013-02-20 12:00:59