2012-06-21 16 views
5

यहाँ एक दिलचस्प एक ...एंड्रॉयड उन्मुखीकरण - उद्देश्य (कैमरा) के साथ मुद्दों

मैं एक आवेदन एंड्रॉयड 2.3.3 और अधिक चल रहे उपकरणों के लिए मैं लिख रहा हूँ है।

इसमें एक मुख्य गतिविधि है जो कैमरे को एक इरादे से कॉल करती है।

यदि उपयोगकर्ता कैमरा लॉन्च करने के लिए बटन क्लिक करता है; फिर एक तस्वीर लेता है; फिर मुख्य गतिविधि पर वापस जाने के लिए "पूर्ण" क्लिक करता है - एप्लिकेशन ठीक काम करता है और मुख्य गतिविधि पर एक छविदृश्य में नई तस्वीर प्रदर्शित करता है।

हालांकि, यदि उपयोगकर्ता पोर्ट्रेट अभिविन्यास में मुख्य गतिविधि का उपयोग करता है; फिर कैमरे के इरादे को खोलने के लिए बटन पर क्लिक करता है और अभिविन्यास को परिदृश्य में बदल देता है; फिर मुख्य गतिविधि पर वापस जाने के लिए किया गया क्लिक करें - एप्लिकेशन क्रैश

लेकिन फिर भी ... यदि उपयोगकर्ता पोर्ट्रेट अभिविन्यास में मुख्य गतिविधि का उपयोग करता है; फिर कैमरे के इरादे को खोलने के लिए बटन पर क्लिक करता है और अभिविन्यास को परिदृश्य में बदल देता है; फिर मुख्य गतिविधि पर वापस जाने के लिए क्लिक करने से पहले अभिविन्यास को वापस पोर्ट्रेट (कैमरे में) में बदल देता है - फिर एप्लिकेशन सामान्य रूप से चलना जारी रहता है।

सामग्री मैं कोशिश की है: मैं आवेदन (मुख्य गतिविधि) के लिए मजबूर करने मैनिफ़ेस्ट फ़ाइल को बदल दिया है (मैं भी इस को हटा दिया है) चित्र में उन्मुख मैं करने की कोशिश में मुख्य गतिविधि के लिए इस लाइन को शामिल किया है गतिविधि की फिर से ड्राइंग संभाल पर यह कैमरा के इरादे से लौटने:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

डिबग खिड़की मैं त्रुटियों nullpointer अपवाद का वर्णन मिलता है - मुझे लगता है कि इस वजह से विचारों के लिए एक ओरिएंटेशन बदलने के बाद अब देखते हैं छवि को तब तक पारित किया जाना चाहिए जब तक अभिविन्यास उतना ही न हो जब इसे छोड़ा गया हो।

मैं थोड़ा फंस गया हूं इसलिए कुछ सलाह की सराहना करेंगे।

+0

http://i56.tinypic.com/2iu97on.jpgh क्रैश – max4ever

+0

का लॉगकैट http://stackoverflow.com/questions/14066038/why-image-captured-using-camera-intent-gets-rotated-on -सोम-डिवाइस-इन-एंड्रॉइड –

उत्तर

3

जब आपकी स्क्रीन अभिविन्यास बदलती है, तो आपका Activity नष्ट हो जाता है और नए अभिविन्यास में पुनर्निर्मित किया जाता है। तो Activity के जीवन के दौरान कोई संदर्भ प्राप्त करने वाले किसी भी चर को अब कुछ भी संदर्भित नहीं किया जाएगा, और यदि आप ऑब्जेक्ट तक पहुंचने का प्रयास करते हैं तो वे उन्हें मानों को दोबारा निर्दिष्ट किए बिना संदर्भित करते हैं, तो आपको NullPointerException मिल जाएगा।

विधि onSaveInstanceState() कॉन्फ़िगरेशन परिवर्तनों के बीच अस्थायी डेटा को सहेजने के लिए उपयोग किया जाता है। यह एक बंडल बनाता है जो onCreate() पर पास किया जाता है जब Activity फिर से शुरू होता है।

किसी भी कोड के बिना, मुझे नहीं पता कि यह आपकी समस्या है, लेकिन यह एक लायक है।

अधिक जानकारी के लिए http://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges देखें (और मैंने प्रदान की तुलना में अधिक सटीक जानकारी, इसमें कोई संदेह नहीं है)।

+0

टिप के लिए धन्यवाद। मेरी जांच के दौरान, मुझे वास्तव में दो दुर्घटनाएं मिलीं जिनसे मुझे निपटना पड़ा। पहली दुर्घटना को मेरी मुख्य गतिविधि में इन दो विधियों को सम्मिलित करके हल किया गया था: – agrodude

1

हे मुझे यकीन नहीं कर रहा हूँ लेकिन मैनिफ़ेस्ट फ़ाइल में इस संपत्ति रखने का प्रयास उम्मीद है कि यह काम करना चाहिए

android:configChanges="orientation|keyboardHidden" 
+0

यह शायद काम करेगा, लेकिन Google द्वारा अंतिम उपाय के अलावा किसी भी अन्य चीज़ के रूप में इसकी अनुशंसा नहीं की जाती है - http://developer.android.com/guide/topics/ देखें संसाधन/रनटाइम-परिवर्तन.html # हैंडलिंगथी चेंज – Spinner

+1

यह भी काम नहीं कर रहा है :( – NarendraJi

+0

@DroidWormNarendra मुझे बताएं कि आप सॉफ्ट कीबोर्ड के साथ क्या करना चाहते हैं? –

0

सैमसंग एस 3 और एस 4 जैसे कुछ Android उपकरणों लैंडस्केप मोड में डिफ़ॉल्ट कैमरा सतह दृष्टिकोण है। जब आप कैमरा कॉल करते हैं और छवि को कैप्चर करते हैं और अपने एप्लिकेशन पर आते हैं, चाहे आपने ओरिएंटेशन पोर्ट्रेट सेट किया हो, तो यह पहले लैंडस्केप मोड में खुल जाएगा और फिर पोर्ट्रेट मोड में बदल जाएगा।

इसका एंड्रॉइड ओएस व्यवहार। इस गतिविधि के कारण इसे स्वयं बनाता है। उस समय आपको नल पॉइंटर अपवाद मिल रहा है। आप मेनिफेस्ट फ़ाइल में configChanges सेटिंग करके संभाल सकते हैं।

android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" 

और आप डेटा onSaveInstanceState() में अस्थायी ठीक ही उसके जवाब में @Spinner से कहा स्टोर कर सकते हैं।

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