2011-03-30 19 views
13

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

Intent intent = new Intent("android.intent.action.VIEW", 
    Uri.parse("http://my.example.com/")); 
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 
views.setOnClickPendingIntent(R.id.text, pendingIntent); 

दुर्भाग्य से, एक नई ब्राउज़र विंडो/टैब हर बार उपयोगकर्ता विजेट क्लिक करता है खोला जाता है: MyAppWidgetProvider.onUpdate में मैं एक नया आशय पैदा करते हैं। मेरे पृष्ठ में कुछ फैंसी AJAX/जावास्क्रिप्ट पृष्ठभूमि में चल रहा है और नियमित रूप से http अनुरोध भेज रहा है। इसलिए मैं एक ही पृष्ठ वाले 8 टैब रखता हूं और निरंतर 8 गुना http अनुरोध भेजता हूं।

क्या कोई तरीका है, उदा। नए टैब खोलने से बचने के लिए अलग-अलग कार्रवाई या अतिरिक्त पैरामीटर?

एक कामकाज के रूप में अब मैं वेबव्यू युक्त एक नई गतिविधि बनाने के बारे में सोच रहा हूं, लेकिन इस जटिलता से बचना चाहता हूं।

उत्तर

18

हां, यह संभव है। यह सुनिश्चित करने के लिए कि आपके ब्राउज़र के लिए उसी ब्राउज़र टैब का पुन: उपयोग किया गया है, http://developer.android.com/reference/android/provider/Browser.html#EXTRA_APPLICATION_ID का उपयोग करें। उदाहरण के लिए:

Context context = widget.getContext(); 
Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
intent.putExtra(Browser.EXTRA_APPLICATION_ID, context.getPackageName()); 
+0

धन्यवाद! EXTRA_APPLICATION_ID एपीआई स्तर 3 (एंड्रॉइड 1.5) के बाद भी उपलब्ध है! – geekQ

+1

'getPackageName()' आंशिक रूप से केवल मेरे मामले में काम करता है (टैबलेट एंड्रॉइड 4.1.1)। इसने ब्राउज़र को उसी टैब से लॉन्च किया था, लेकिन वापस दबाएं, ब्राउज़र पिछले पृष्ठ पर वापस नहीं जाता है, बस इसे खत्म करें। [इस] द्वारा (http://stackoverflow.com/questions/9902225/browser-extra-plplication-id-do-not-work-in-the-tablet-do-you-now-other-work-a/9917548 # 9917548), यह काम करता है !!!! – Yeung

+0

पूरी तरह से काम किया। मैंने इरादा .putExtra (Browser.EXTRA_APPLICATION_ID, getAplicationContext() प्राप्त किया। GetPackageName()); – zappullae

-1

मेरे सबसे अच्छे ज्ञान के लिए यह निर्दिष्ट करने का कोई तरीका नहीं है कि कोई नया टैब खोला गया है या इरादा का उपयोग नहीं कर रहा है। मैंने कुछ भी देखा और यह जांचने के लिए कि कौन से टैब खुले थे, वैसे भी नहीं मिला। एक और चीज जिसे आप आजमा सकते हैं, यह ट्रैक कर रहा है कि क्या उपयोगकर्ता को हाल ही में आपके एप्लिकेशन से ब्राउज़र गतिविधि में भेजा गया है, और जांचें कि ब्राउज़र अभी भी खुला है या नहीं, लेकिन एक बार फिर मैं इसे कई तरीकों से गलत कर सकता हूं।

आपका गतिविधि विचार शायद इस स्थिति में सबसे अच्छे दांवों में से एक होगा, हालांकि मैं समझ सकता हूं कि आप इससे क्यों बचना चाहते हैं।

+0

"आप हमेशा ब्राउज़र के लिए प्रक्रिया को समाप्त कर सकते हैं, और यह सभी टैब बंद करना चाहिए, लेकिन मुझे संदेह है कि यह आदर्श समाधान है।" - यह संभव नहीं है, सिवाय इसके कि अगर उसका ऐप जड़ वाले फोन पर रूट के रूप में चल रहा है। – CommonsWare

+0

संभव नहीं है? एक कार्य को समाप्त करना निश्चित रूप से संभव है, कितने कार्य हत्यारों को और कैसे होगा? अब मैंने अभी कोशिश की है और जब मैंने ब्राउजर को पुनरारंभ किया है तो यह वही टैब खोला है, इसलिए _that_ हिस्सा काम नहीं कर सकता है, लेकिन आप निश्चित रूप से कार्यों को समाप्त कर सकते हैं। –

+0

क्षमा करें, एंड्रॉइड 2.1 के बाद टास्क किलर को फेंक दिया गया था। एक प्रक्रिया एंड्रॉइड के नए संस्करणों पर एक और प्रक्रिया को मार नहीं सकती है। – CommonsWare

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