मैं ऐप लिखने के लिए कैमरा एपीआई का उपयोग कर रहा हूं: पूर्वावलोकन दिखाएं, और एक फोटो लें। पहला संस्करण बहुत अच्छी तरह से काम करता है।एंड्रॉइड कैमरा एपीआई ऐप पर क्रैश
public class CameraDemo extends Activity
मैं भी एक सदस्य सेट: वर्ग पूर्वावलोकन में SurfaceView SurfaceHolder.Callback
public void surfaceCreated(SurfaceHolder holder) {
// The Surface has been created, acquire the camera and tell it where
// to draw.
camera = Camera.open();
try {
camera.setPreviewDisplay(holder);
camera.startPreview();
} catch (IOException e) {
e.printStackTrace();
}
hasSurface = true;
}
public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
// It will be called immediately after surfaceCreated
// I move it to Resume.
setCameraPreviewParameters();
camera.startPreview();
}
लागू करता है मुख्य गतिविधि में फैली हुई है CameraUnit ui; यह है:
public class CameraUnit extends LinearLayout
onCreate में,
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ui = new CameraUnit(this);
setContentView((View) ui);
Log.d(TAG, "onCreate'd");
}
यह एक LinearLayout वस्तु है, जो SurfaceView शामिल है, और एक कैमरा बटन बनाएं।
onResume है:
@Override
protected void onResume() {
super.onResume();
}
हालांकि यह काम करता है, मुझे लगता है कि onResume रिक्त नहीं होना चाहिए। मैं सतह को भी देखता हूं और सतह बदलती है famous Android app example OCRTest में खाली हैं इसलिए मुझे विश्वास है कि यह बेहतर है और सतहों में सतहों को स्थानांतरित करने के लिए भी संभव है। सतह और सतह को चालू किया गया है।
मुझे लगता है कि मेरे ऐप के 1 संस्करण के लिए प्रवाह चैट होना चाहिए: मुख्य गतिविधि OnCreate (LinearLayout और उसके SurfaceView, कैमरा बटन बनाई गई हैं जहां), surfaceCreated और surfaceChanged कहा जाता है, onResume।
तो मैं बस सतहों में सतहों को स्थानांतरित कर सकता हूं क्रिएटिव और सतह पर चालू किया गया। लेकिन यह काम नहीं करता है! मैंने डीबग का उपयोग सतह को खोजने के लिए किया है। मुझे लगता है कि सतह क्रिएट नहीं कहा जाता है। मेरा ऐप अलग ओसीआरटेस्ट है, जो मुख्य गतिविधि में SurfaceHolder.Callback लागू करता है। मैं SurfaceView में SurfaceHolder.Callback लागू:
class Preview extends SurfaceView implements SurfaceHolder.Callback
तो मैं onResume
ui.preview.surfaceCreated(ui.preview.mHolder);
ui.preview.surfaceChanged(ui.preview.mHolder, 0, 800, 400);
मैं बेतरतीब ढंग से पिछले तीन पूर्णांक तर्क सेट में दो अन्य पंक्तियाँ जोड़ें। जब मैं गतिविधि शुरू करता हूं, तो एंड्रॉइड फोन में त्रुटि विंडो पॉप आउट हो जाती है। यह कहता है "इसके कारण: java.lang.RuntimeException: कैमरा सेवा से कनेक्ट करने में विफल"। लेकिन इसे कैसे ठीक करें ???? बहुत बहुत धन्यवाद!
त्रुटियाँ हैं:
01-07 00:27:57.173: W/dalvikvm(11625): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0)
01-07 00:27:57.173: E/AndroidRuntime(11625): FATAL EXCEPTION: main
01-07 00:27:57.173: E/AndroidRuntime(11625): java.lang.RuntimeException: Unable to resume activity {com.example/com.example.CameraDemo}: java.lang.RuntimeException: Fail to connect to camera service
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2460)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2481)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1847)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.app.ActivityThread.access$1500(ActivityThread.java:132)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.os.Handler.dispatchMessage(Handler.java:99)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.os.Looper.loop(Looper.java:150)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.app.ActivityThread.main(ActivityThread.java:4263)
01-07 00:27:57.173: E/AndroidRuntime(11625): at java.lang.reflect.Method.invokeNative(Native Method)
01-07 00:27:57.173: E/AndroidRuntime(11625): at java.lang.reflect.Method.invoke(Method.java:507)
01-07 00:27:57.173: E/AndroidRuntime(11625): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-07 00:27:57.173: E/AndroidRuntime(11625): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-07 00:27:57.173: E/AndroidRuntime(11625): at dalvik.system.NativeStart.main(Native Method)
01-07 00:27:57.173: E/AndroidRuntime(11625): Caused by: java.lang.RuntimeException: Fail to connect to camera service
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.hardware.Camera.native_setup(Native Method)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.hardware.Camera.<init>(Camera.java:265)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.hardware.Camera.open(Camera.java:241)
01-07 00:27:57.173: E/AndroidRuntime(11625): at com.example.Preview.surfaceCreated(Preview.java:60)
01-07 00:27:57.173: E/AndroidRuntime(11625): at com.example.CameraDemo.onResume(CameraDemo.java:64)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1242)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.app.Activity.performResume(Activity.java:3904)
01-07 00:27:57.173: E/AndroidRuntime(11625): at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2450)
01-07 00:27:57.173: E/AndroidRuntime(11625): ... 12 more
01-07 00:27:59.455: I/Process(11625): Sending signal. PID: 11625 SIG: 9
मुझे लगता है कि यह एसिटिविटी के ऑनक्रेट, ऑनस्यूम और सतह के निर्माण आदि के कार्यान्वयन अनुक्रम से संबंधित हो सकता है। ऐसा लगता है कि सतही दृश्य वर्ग SurfaceHolder लागू करता है। कॉलबैक, जब भी हम बिंदु पर होते हैं तब भी सतह तैयार नहीं होती है गतिविधि के ऑन्यूसम का। तो हम कब तैयार हैं? यदि गतिविधि SurfaceHolder लागू करती है। कॉलबैक, अंतर्निहित अनुक्रम क्या हैं? मदद!!!! – user1914692