2011-03-16 6 views
6

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

जब मैं एक वेब ब्राउज़र कहता हूं तो मैं केवल अग्रेषण को कार्यान्वित करना चाहता हूं, फिर मेरी योजना को दूसरी गतिविधि शुरू करने के लिए कॉल करें। जब मैं वापस आऊंगा, तो मैं वेब ब्राउजर देखना नहीं चाहूंगा।

मुझे यह कैसे करना चाहिए?

Intent i = new Intent(Intent.ACTION_VIEW); 
i.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
i.setData(Uri.parse(url)); 
startActivity(i); 

मैंने इसे पहले ही जोड़ा है, लेकिन यह काम नहीं करता है!

उत्तर

0

यह शायद इसलिए होता है क्योंकि दूसरी गतिविधि एक ही काम में शुरू की है आप से ब्राउज़र, शुरू करने का मतलब है कि जो शुरू कर दिया अपने दूसरी गतिविधि पिछली गतिविधि (गतिविधि 1) के साथ पहले से मौजूद कार्य में वापस आती है जो बैक-स्टैक पर धकेलती है। here देखें।

यदि आप अपनी दूसरी गतिविधि को एक अलग कार्य पर शुरू कर रहे हैं, तो "वापस" दबाकर उस कार्य को समाप्त करना चाहिए और ब्राउज़र के पीछे कार्य पर वापस जाना चाहिए।

कि पूरा करने के लिए, आप इरादे में FLAG_ACTIVITY_NEW_TASK का उपयोग गतिविधि 2 प्रारंभ करने या अपने मेनिफ़ेस्ट में singleTop को गतिविधि के android:launchMode विशेषता सेट कर सकते हैं।

+0

धन्यवाद। मैं समझ गया! – HiMing

1

जब आप अपने आशय शायद खोलने आप इसे कोई इतिहास ध्वज के साथ सेट कर सकते हैं

intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); 
+0

मैं इसे जोड़ा है, लेकिन यह नहीं काम करता है! – HiMing

+0

क्या आप मुझे बता सकते हैं कि अनुक्रम वास्तव में क्या है? – papachan

0

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

मैंने गतिविधि परिभाषा एंड्रॉइड को प्रकट करने के लिए जोड़ने की कोशिश की: user634618 के अनुसार launchMode = "singleTop"। लेकिन यह काम नहीं करता है। मुझे समझ में नहीं आता क्यों सिंगलटॉप को मदद चाहिए।

documentation में भी यह है:

BlockquoteAs एक और उदाहरण, Android ब्राउज़र आवेदन घोषणा करता है कि वेब ब्राउज़र गतिविधि हमेशा अपने कार्य-से तत्व में singleTask लांच मोड निर्दिष्ट करने में खुलना चाहिए। इसका अर्थ यह है कि यदि आपका एप्लिकेशन एंड्रॉइड ब्राउज़र खोलने का इरादा रखता है, तो इसकी गतिविधि आपके आवेदन के समान कार्य में नहीं रखी जाती है। इसके बजाए, ब्राउज़र के लिए या तो नया कार्य शुरू होता है, या यदि ब्राउज़र में पृष्ठभूमि में पहले से ही कोई कार्य चल रहा है, तो वह कार्य नए इरादे को संभालने के लिए आगे लाया जाता है।

मुझे लगता है कि यह समस्या का कारण बनता है। लेकिन वर्तमान कार्य में रन ब्राउज़र को कैसे मजबूर करना है?

6

जैसा कि अन्य उपयोगकर्ताओं द्वारा समझाया गया है, आपकी गतिविधि ब्राउज़र के ढेर पर बनाई जा रही है। आप ब्राउज़र को अपने स्वयं के ढेर पर खोलने से नहीं रोक सकते हैं, लेकिन आप अपने आवेदन पर एक ही कॉन्फ़िगरेशन कर सकते हैं।

अपनी गतिविधि में ब्राउज़र द्वारा कहा जाता है, अपने मैनिफ़ेस्ट फ़ाइल में निम्नलिखित जोड़ें:

android:allowTaskReparenting="true" 
android:launchMode="singleTask" 

यह अपनी गतिविधि कर देगा आपके आवेदन ढेर (ब्राउज़र की के बजाय) का बनाया जाना। यह मूल रूप से आपके आवेदन को सामने लाएगा।

एंड्रॉइड: लॉन्चमोड = "सिंगलटॉप" काम नहीं करेगा क्योंकि यह केवल एक नई गतिविधि बनाने से रोकता है अगर वह गतिविधि स्टैक के शीर्ष पर है, जो ऐसा नहीं है क्योंकि ब्राउजर शीर्ष पर वर्तमान में है। एंड्रॉइड: launchMode = "सिंगल टास्क" सुनिश्चित करेगा कि कोई भी अन्य उदाहरण बनाए गए हैं चाहे वे शीर्ष पर हों या नहीं।

आप विन्यास के साथ Intent.FLAG_ACTIVITY_NO_HISTORY ऊपर तो सब कुछ ठीक काम करना चाहिए, ब्राउज़र पहले से खुला है या नहीं किया जा रहा है की परवाह किए बिना सेट करते हैं। सबसे बुरे मामले में, ब्राउज़र ढेर के नीचे होगा और यदि आप वापस मारते रहते हैं तो आप अंततः एप्लिकेशन से बाहर निकलने के बजाय ब्राउज़र तक पहुंच जाएंगे।

+0

मैंने अभी अपना जवाब संपादित किया है। एंड्रॉइड: लॉन्चमोड = "सिंगल टास्क" आपके एप्लिकेशन के कार्य में गतिविधि बनाने के लिए अनिवार्य है। ब्राउज़र ध्वज के बावजूद इतिहास में रहेगा लेकिन इसे वास्तव में ढेर के नीचे ले जाया जाएगा। – AngraX

0

मैं भी इस मुद्दे को पूरा। यहां सारांश है:

  1. यदि ब्राउज़र पहले नहीं चल रहा था, तो यह उपरोक्त उत्तरों के साथ अच्छी तरह से काम करता है; यदि ब्राउज़र से पहले चलाया गया था:
  2. intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) काम नहीं करता है;
  3. android:allowTaskReparenting="true" android:launchMode="singleTask" दिखता गतिविधि ढेर के नीचे में ब्राउज़र डाल करने के लिए पसंद है, लेकिन आवेदन (BACK कुंजी द्वारा) छोड़ने के बाद, अंत में ब्राउज़र फिर से शुरू की है।

तो मूल रूप से यह समस्या अभी भी मौजूद है। अगर मैं इसे हल करने का कोई तरीका ढूंढूं तो मैं पोस्ट करूंगा।

+0

कोई समाधान ढूंढने में विफल ... तो आखिरी विकल्प बैक कुंजी दबाकर होम स्क्रीन लॉन्च करने के लिए बैक कुंजी हैंडलर को ओवरराइट करना है, जब तक कि गतिविधि बैक कुंजी पर होम स्क्रीन पर जाने का इरादा रखती है। बदसूरत, लेकिन काम करता है। – Mine

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