2015-03-04 4 views
6

मैं एक ऐसा एप्लीकेशन विकसित कर रहा हूं जो उपयोगकर्ता को ब्लूटूथ के माध्यम से जुड़े बाहरी बारकोड स्कैनर का उपयोग करके बारकोड स्कैन करने देता है। बारकोड स्कैनर कीबोर्ड के रूप में कार्य करता है, यानी एंड्रॉइड सोचता है कि स्कैन किए गए बारकोड को कीबोर्ड पर टाइप किया गया है।ब्लूटूथ कीबोर्ड से इनपुट की अनुमति दें भले ही स्क्रीन लॉक

ऐप ठीक काम कर रहा है, जब तक स्क्रीन चालू रहती है।

स्क्रीन बंद होने के बाद, मैं स्कैनिंग बारकोड जारी रख सकता हूं, लेकिन स्कैन किए गए टेक्स्ट अब ऐप तक नहीं पहुंचते हैं, बल्कि लॉक स्क्रीन पर कार्रवाइयों को आमंत्रित करते हैं।

क्या बाहरी कीबोर्ड से इनपुट को ऐप में इनपुट करने की अनुमति देने का कोई तरीका है हालांकि स्क्रीन बंद कर दी गई है?

वैकल्पिक रूप से मुझे चालू रहने के लिए स्क्रीन को मजबूर करना होगा, लेकिन यह बुलेट प्रूफ नहीं है, क्योंकि उपयोगकर्ता गलती से स्क्रीन को लॉक कर सकता है।

अद्यतन

मैं का उपयोग करके सही दिशा में एक छोटा कदम बना दिया है:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); 

यह (गैर-सुरक्षित) लॉक स्क्रीन के बिना एप्लिकेशन दिखाई देंगे, जब नए इनपुट कीबोर्ड से संसाधित किया जाता है। दुर्भाग्यवश, पहला पत्र गुम है। यह स्क्रीन को जागने वाले पहले अक्षर और बाकी इनपुट वास्तव में EditText तक पहुंचने के कारण होता है।

+0

अपने स्कैनर गतिविधि 'GetWindow() addFlags (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) के लिए इस कोड को जोड़ने;' और प्रकट में इस अनुमति जोड़ने '<का उपयोग करता है-अनुमति एंड्रॉयड: नाम =" android.permission.WAKE_LOCK " /> '। आप कर चुके हैं। –

+1

संस्करण के आधार पर, आप लॉक स्क्रीन पर जोड़ने के लिए एक विजेट विकसित कर सकते हैं। यह कीबोड (बीटी स्कैनर) को सुन सकता है और डेटा को आपकी गतिविधि में भेज सकता है। – AxelH

उत्तर

1

यदि आप केवल पहले नंबर खो रहे हैं, तो आप ... Check Digit का उपयोग कर पुनर्प्राप्त कर सकते हैं।

मुझे पता है कि यह एक हैक है लेकिन इसे इस समस्या को हल करना चाहिए।

+0

मुझे डीकोडेड बारकोड (अंतिम स्ट्रिंग) का पहला अक्षर याद आ रहा है। मेरे पास बारकोड स्कैनर वास्तव में पहले स्थान पर पढ़ने के लिए उपयोग नहीं है, बस यह कीबोर्ड के रूप में क्या देता है। मैं यह भी नहीं जानता कि मुझे किस तरह का बारकोड मिलता है। तो मुझे डर है, यह एक विकल्प नहीं है। – Baz

2

यह मेरे लिए इसी तरह की स्थिति में काम करता है। अपने आवेदन को अग्रभूमि में रखते समय स्क्रीन पर रखें। ।

getWindow().addFlags(
    WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED 
    | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON 
    | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON 
); 
+0

जब उपयोगकर्ता गलती से अपने डिवाइस के पावर बटन दबाता है, तो क्या यह अभी भी इनपुट ईवेंट को ऐप पर अग्रेषित करेगा? – Baz

+0

मुझे लगता है कि बुलेट प्रूफ दृष्टिकोण नहीं होगा। क्या होता है यदि कोई और गतिविधि स्वयं को अग्रभूमि में रखती है? वैध कोड प्राप्त होने पर पुष्टिकरण को प्रतिबिंबित करने के लिए पर्याप्त नहीं होगा? – sstn

+0

@sstn ऐप पहले से ही ऐसा करता है, उपयोगकर्ता हालांकि इस सुविधा को अक्षम कर सकता है। स्क्रीन लॉक करने और दूसरे ऐप पर स्विच करने के बीच अंतर यह है कि स्क्रीन लॉक करना अधिक आसानी से होता है (क्योंकि यह एक हार्डवेयर बटन है जिसे आसानी से क्लिक किया जाता है)। मुझे लगता है कि मैं यहां भाग्य से बाहर हूं ... – Baz

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