2011-02-02 31 views
7

मुझे अजीब समस्या का सामना करना पड़ा है।स्क्रीन रोटेशन के बाद ब्लूटूथ सक्रियण चेतावनी संवाद गुणा

Intent activateBTIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); 
startActivityForResult(activateBTIntent, BT_ACTIVATE_INTENT);         

मैं इसे कोई फर्क नहीं पड़ता का उपयोग करता है, तो ब्लूटूथ पहले से ही सक्रिय है या नहीं: गतिविधि onStart() मैं ब्लूटूथ सक्रियण और 120S खोजे जाने का अनुरोध प्रयोजन द्वारा से। एंड्रॉइड प्रलेखन का कहना है कि ब्लूटूथ सक्रिय हो जाएगा अगर यह नहीं था, और यह ठीक काम करता है। दोनों ही मामलों में मैं प्रणाली सूचना संवाद जब मैं स्क्रीन मैं झिलमिलाते निरीक्षण बारी बारी से प्राप्त

enter image description here

। हां/नहीं दबाएं एक संवाद हटा देता है, लेकिन अभी भी एक और नीचे है। स्क्रीन रोटेशन करने पर मैं अलर्ट संवाद का ढेर प्राप्त कर सकता हूं, और उनसे छुटकारा पाने के लिए प्रत्येक पर हाँ/नहीं दबाएं।

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

क्या किसी ने इसका सामना किया है, और शायद कुछ उपयोगी संकेत है कि इससे कैसे बचें?

धन्यवाद और सम्मान करता है।

उत्तर

2

यह सेटिंग ऐप में एक बग है जो इसका कारण बनता है। RequestPermissionActivity रोटेशन पर RequestPermissionHelperActivity के अपने उदाहरण को डुप्लिकेट कर रहा है।

+0

बहुत बहुत धन्यवाद। मैं इसे बहुत लंबे समय से ढूंढ रहा हूं। चीयर्स। – Zelimir

0

(आपका पोस्ट लगभग पर्याप्त जानकारी नहीं है, इसलिए मैं यहाँ यह सोचते हैं हूँ ...)

मैं startActivityForResult के बारे में भी यकीन नहीं है।

यदि आप प्रबंधित अलर्टडिअलॉग का उपयोग करते हैं तो आपको Create() में showDialog() नहीं करना चाहिए। अगर ब्लूटूथ चीज ऐसा करती है, तो क्या आप ऊपर दिए गए कोड को ऑनक्रेट() से नहीं चला सकते?

+0

मेरी पोस्ट को और अधिक सटीक होने के लिए अपडेट किया गया। सुझाव के लिए धन्यवाद। इरादा ऑनस्टार्ट() से भेजा जाता है, इसलिए यह कारण नहीं था। – Zelimir

1

मुझे एक ही समस्या का सामना करना पड़ रहा था। इसके साथ बहुत समय बिताने के बाद, मुझे एक समाधान मिला है।

आप activateBTIntent के लिए FLAG_ACTIVITY_NO_HISTORY ध्वज का उपयोग करके 'ब्लूटूथ सक्रियण सूचना संवाद' के दोहराव से बचने कर सकते हैं। लेकिन इस ध्वज को सेट करने से एक्टिविटीफॉर रिसेट अनुपयोगी होगा।

कोड -

Intent activateBTIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); 
activateBTIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
startActivity(activateBTIntent); 

activateBTIntent साथ FLAG_ACTIVITY_NO_HISTORY का उपयोग करते हुए इतिहास ढेर से 'ब्लूटूथ सक्रियण सूचना संवाद की गतिविधि को हटा देगा। इस मामले में, जब उन्मुखीकरण बदल गया है में इस प्रकार, 'ब्लूटूथ सक्रियण सूचना संवाद की गतिविधि समाप्त हो जाएगा और थम्बा बनाया (नहीं दोहराया गया):

संदर्भ http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_NO_HISTORY

+1

समस्या यह है कि आमतौर पर आपको startActivityForResult() का उपयोग करने की आवश्यकता होती है। इस तरह आपको सूचित किया जाता है कि उपयोगकर्ता ने ब्लूटूथ सक्रियण अलर्ट सिस्टम पर हाँ या नहीं दबाया है। यदि उपयोगकर्ता नहीं चुनता है तो आप क्या करते हैं? एक चीज आप कोशिश कर सकते हैं। अपनी गतिविधि को सीमित करें जो केवल पोर्ट्रेट के लिए ब्लूटूथ इरादा शुरू करता है (आपके मैनिफेस्ट में)। शायद आप इस मुद्दे से बचेंगे। यदि आपको दोनों ओरिएंटेशन को संभालने की ज़रूरत है, और पोर्ट्रेट/लैंडस्केप में अलग-अलग लेआउट प्रस्तुत करना है तो मेरा सुझाव कोई उपयोग नहीं है। – Zelimir

+0

@Zelimir आप सही हैं लेकिन यह काम कर रहा है। जब उपयोगकर्ता हां पर क्लिक करता है तो ब्लूटूथ सक्रिय होता है और जब उपयोगकर्ता क्लिक करता है तो ब्लूटूथ ब्लूटूथ अक्षम रहता है। समस्या तब उत्पन्न होती है जब आप कुछ ऑपरेशन करने के लिए एक्टिविटी रिसेट पर उपयोग कर रहे हैं। – Vivek

+0

हां, यह वास्तव में मुझे सामना करना पड़ा था। मेरे आगे के कार्य उपयोगकर्ता हां/नहीं चयन पर निर्भर थे। लेकिन, यदि यह आपके लिए महत्वपूर्ण नहीं है, तो मैं सहमत हूं कि आपके पास समाधान है। – Zelimir

0

मुद्दा सूचित किया गया है (goggle issue tracker) लेकिन यह 6 साल बाद पहले ही खुला है (एंड्रॉइड 7.1.2 के साथ चेक किया गया है)।

दुर्भाग्य से ध्वज FLAG_ACTIVITY_NO_HISTORY अब और काम नहीं करता है।

activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LOCKED); 

सिर्फ

से पहले के नाम से जाना: केवल त्वरित काम के आसपास मैं जब तक एंड्रॉयड टीम इसे ठीक (अगर वे कभी होगा) गतिविधि स्क्रीन अभिविन्यास परिवर्तन लॉक करने के लिए है, बस समय संवाद प्रदर्शित किया जाता है के लिए मिला
Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); 
startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); 

और फिर आशय परिणाम पर उपयोग

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    if (requestCode == REQUEST_ENABLE_BT) { 
    activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); 
    } 
    super.onActivityResult(requestCode, resultCode, data); 
} 

। यह एक अस्थायी उपाय है लेकिन आमतौर पर बीटी सक्रियण के दौरान इस संभावित मुद्दे को दिखाने से बेहतर है।

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