2012-03-22 23 views
15

तो मैंने कैमरा एपीआई पर पढ़ा है और इस पर कुछ भी नहीं मिला। मैं फ्रेम को पकड़ने के लिए कैमरा का उपयोग कर रहा हूं और जब तक मैं कैमरे को रिलीज़ करने की कोशिश नहीं करता तब तक यह पूरी तरह से काम करता है। मैं कॉल में से एक अनुक्रम में त्रुटि दोहराया:पूर्वावलोकन कैमरा से एंड्रॉइड कैमरा रिलीज त्रुटि

camera = Camera.open(); 
camera.setPreviewDisplay(getHolder()); 
Parameters params = camera.getParameters(); 
List<Size> ls = params.getSupportedPreviewSizes(); 
Size size = ls.get(1); 
this.width = size.width; 
this.height = size.height; 
params.setPreviewSize(size.width, size.height); 
camera.setParameters(params); 
camera.setDisplayOrientation(90); 
camera.setPreviewCallback(this); 
camera.startPreview(); 
camera.stopPreview(); 
camera.release(); 

त्रुटि मैं

03-22 13:31:42.592: E/AndroidRuntime(14152): java.lang.RuntimeException: Method called after release() 
03-22 13:31:42.592: E/AndroidRuntime(14152): at android.hardware.Camera.setHasPreviewCallback(Native Method) 
03-22 13:31:42.592: E/AndroidRuntime(14152): at android.hardware.Camera.access$600(Camera.java:114) 
03-22 13:31:42.592: E/AndroidRuntime(14152): at android.hardware.Camera$EventHandler.handleMessage(Camera.java:545) 
03-22 13:31:42.592: E/AndroidRuntime(14152): at android.os.Handler.dispatchMessage(Handler.java:99) 
03-22 13:31:42.592: E/AndroidRuntime(14152): at android.os.Looper.loop(Looper.java:130) 
03-22 13:31:42.592: E/AndroidRuntime(14152): at android.app.ActivityThread.main(ActivityThread.java:3684) 
03-22 13:31:42.592: E/AndroidRuntime(14152): at java.lang.reflect.Method.invokeNative(Native Method) 
03-22 13:31:42.592: E/AndroidRuntime(14152): at java.lang.reflect.Method.invoke(Method.java:507) 
03-22 13:31:42.592: E/AndroidRuntime(14152): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:845) 
03-22 13:31:42.592: E/AndroidRuntime(14152): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:603) 
03-22 13:31:42.592: E/AndroidRuntime(14152): at dalvik.system.NativeStart.main(Native Method) 

है तो जो कुछ भी हो रहा है मेरी कार्यों में से एक में नहीं है। अगर मैं कैमरा पर टिप्पणी करता हूं .setPreviewCallback (यह); तो यह त्रुटि प्रकट नहीं होती है, लेकिन मैं स्पष्ट रूप से अपना कॉलबैक खो देता हूं, जो कि मेरे ऐप में कैमरा शामिल करने का पूरा बिंदु है।

+0

मैं भी सामना करना पड़ा एक ही समस्या, मैं इसे का उपयोग कर तय [http://stackoverflow.com/a/34064944/4531507](http: //stackoverflow.com/a/34064944/4531507) –

+0

सामान्य नियम यह है कि किसी भी कैमरे की कॉल किसी भी समय एक रनटाइम अपवाद फेंक सकती है, भले ही विशिष्ट कॉल में यह अपवाद आधिकारिक रूप से दस्तावेज न हो। यदि आपके टेस्ट डिवाइसेज इस तरह से कभी दुर्व्यवहार नहीं करते हैं, तो आश्वस्त रहें कि हार्डवेयर, रोम और स्थापित सॉफ़्टवेयर की कुछ दुर्भाग्यपूर्ण सुपरपोजिशन इस क्रैश का कारण बनती है, या तो पुन: उत्पन्न या अपरिवर्तनीय तरीके से। –

उत्तर

60

आप camera.release() से पहले सेट किए बिना पूर्वावलोकन कॉलबैक करने के लिए है, camera.stopPreview() के बाद: के बाद कैमरा जारी की गई है

camera.setPreviewCallback(null); 

अन्यथा यह कहा जाता है हो सकता है।

+0

धन्यवाद, एक आकर्षण की तरह काम किया। –

+0

यह मेरे लिए भी काम किया। अन्य स्टैक ओवरफ्लो उत्तरों ने इसका उल्लेख किया, लेकिन मेरे लिए कुंजी यह थी कि इसे कैमरे के बीच किया जाना आवश्यक है। स्टॉप पूर्वावलोकन और कैमरा। कृपया()। धन्यवाद! – Danation

+0

आपको बहुत बहुत धन्यवाद !! – jlopez

12

एक तरफ ध्यान दें के रूप में, एक पूरा releaseCamera विधि की तरह दिखता है:

// release Camera for other applications 
private void releaseCamera() { 
    // check if Camera instance exists 
    if (mCamera != null) { 
     sPreviewing = false; 
     // first stop preview 
     mCamera.stopPreview(); 
     // then cancel its preview callback 
     mCamera.setPreviewCallback(null); 
     // and finally release it 
     mCamera.release(); 
     // sanitize you Camera object holder 
     mCamera = null; 
    } 
} 
+0

यही वह सब कुछ आवश्यक है! बस इसे सही जगह पर रखने के लिए सावधान रहें, क्योंकि मेरी समस्या यह थी कि मेरे पास दूसरी जगह थी जहां मैं 'स्टॉप पूर्वावलोकन()' की कोशिश कर रहा था और निश्चित रूप से यह क्रैश हो रहा था .. – Apostrofix

+0

@Apostrofix, बस कैमरे को रोकने के लिए यदि आप इसे एक से अधिक स्थानों में उपयोग करते हैं या यह जांचते हैं कि 'mCamera' ऑब्जेक्ट इसे रोकने से पहले शून्य है तो आप एक और तरीका बनाना चाहेंगे। – georger

संबंधित मुद्दे