हम एंड्रॉइड के लिए इंडी गेम विकसित कर रहे हैं और उपयोगकर्ता को अपना उपनाम चुनना चाहते हैं। हमने एनडीके द्वारा प्रदान की गई मूल गतिविधि का उपयोग करना चुना है क्योंकि यह जाने का सबसे आसान तरीका प्रतीत होता है।देशी गतिविधि का उपयोग करते समय मुलायम कीबोर्ड बंद करते समय क्रैश
पहली समस्या हम कीबोर्ड के साथ सामना किया है था कि समारोह ANativeActivity_showSoftInput() सब पर कुछ भी नहीं करना (के रूप में वर्णित जैसे here) लगता है, इसलिए हम JNI कार्य करने के लिए कहता है का उपयोग कर कीबोर्ड को सामने लाने:
static void showKeyboard(Activity activity) {
String s = Context.INPUT_METHOD_SERVICE;
InputMethodManager m = (InputMethodManager)activity.getSystemService(s);
View w = activity.getWindow().getDecorView();
m.showSoftInput(w, 0);
}
यह कुंजीपटल लाने के लिए ठीक काम करता है, और कुछ उपकरणों पर एक साथ ठीक काम करता है। लेकिन अन्य उपकरणों (जैसे नेक्सस 7), जब उपयोगकर्ता "कीबोर्ड छिपाएं" को हिट करके कीबोर्ड को बंद करने की कोशिश करता पर बटन आवेदन इस डिबग आउटपुट के साथ जमा:
I/InputDispatcher( 453): Application is not responding: AppWindowToken{429b54a8 token=Token{42661288 ActivityRecord{41bb0b00 u0 com.example.project/android.app.NativeActivity}}} - Window{420d6138 u0 com.example.project/android.app.NativeActivity}. It has been 5006.7ms since event, 5005.6ms since wait started. Reason: Waiting because the focused window has not finished processing the input events that were previously delivered to it.
I/WindowManager( 453): Input event dispatching timed out sending to com.example.project/android.app.NativeActivity
और फिर उपयोगकर्ता एक संवाद के साथ प्रस्तुत किया है बॉक्स कह रहा है:
Project isn't responding. Do you want to close it? [Wait]/[OK]
क्या कुछ ऐसा है जो हम स्पष्ट रूप से गलत कर रहे हैं? या यह एक बग हो सकता है? this one जैसे मुद्दे इंगित करते हैं कि मूलभूत गोंद में कीबोर्ड कार्यक्षमता को ठीक से लागू नहीं किया गया है।
एक तरफ ध्यान दें, हमने अभी तक कई उपकरणों पर परीक्षण किया है, लेकिन जहां यह क्रैश नहीं होता है वे पुराने एंड्रॉइड ओएस वाले हैं। साथ ही, जब यह कीबोर्ड दिखाई देता है, तो यह वापस बटन को बदलता है जो इस जैसा दिखता है जो इस जैसा दिखता है। शायद यह एक अलग इनपुट घटना से मेल खाती है जिसे तब पहली बार देशी गोंद विकसित करने के लिए जिम्मेदार नहीं माना गया था? मैं बस अनुमान लगा रहा हूँ।
वैसे भी, अगर कोई व्यक्ति मूल गतिविधि का उपयोग करते समय सॉफ्ट कीबोर्ड काम कर रहा है, तो कृपया हमें बताएं कि आपने यह कैसे किया है।
चीयर्स
अद्यतन
यह Android here में एक बग के रूप में सूचित किया गया है, हम अभी भी हालांकि समाधानों के बारे में सुनने के लिए खुशी होगी। यदि आप इससे भी प्रभावित होते हैं, तो आप उस मुद्दे पर वोट डालना चाहेंगे (स्टार दबाकर)।
मैंने पूरी तरह से याद किया, सी-फाइल को पैच करने से काफी बेहतर, धन्यवाद। –
मौके से, मुझे आज अपने नेक्सस के लिए अपग्रेड मिला और ऐसा लगता है कि समस्या एंड्रॉइड 4.3 में तय की गई है। आपका सुझाव केवल पैच किए गए process_input फ़ंक्शन को लागू करना आसान बनाता है जब एंड्रॉइड संस्करण 4.2 है। यदि आप चाहें, तो आप दूसरों के लिए एक अंतिम समाधान प्रदान करने के लिए अपने और मेरे उत्तरों को जोड़ सकते हैं। इसके बाद मैं इसे अंतिम जवाब के रूप में चिह्नित करूंगा। अन्यथा, अगर मुझे याद होगा, तो मैं इसे अगले सप्ताह कुछ समय करने की कोशिश करूंगा। चीयर्स। –
निश्चित - अद्यतन। मैंने यह भी देखा कि समस्या 4.3 में तय की गई है! बहुत बुरा यह 4.1 और 4.2 फोन पर थोड़ी देर के लिए बाजार में बने रहेगा ... – krsteeve