2012-10-08 9 views
8

प्रति एक बार जब आप चयनकर्ता के साथ startActivity() कर पूछ साथ startActivity() नहीं कर सकते अपने Intent विकल्प इस असाइनमेंट (आईसीएस पर स्थायी या एक बार समय निर्धारित करने के साथ साथ अपनी "हमेशा "और" बस एक बार "एक्शन बटन, 2.x पर यह चेकबॉक्स है)। इस कोड के लिए हालांकि: "| बस एक बार हमेशा" बटन और मेरा चयन स्थायी नहीं कर सकते हैं (मैं केवल सूचीबद्ध क्षुधा मिला है और यह टैप करके किसी भी सक्रिय कर सकता है), एंड्रॉयड किए गए सभी एप्लिकेशन को संभालने के लिए हकदार सूची जाएगा चयनकर्ता सिर्फ एप्लिकेशन

public class Redirector { 
    public static void showActivityWithChooser(Context context, int chooserLabelTitleId, Intent intent) { 
     try { 
     context.startActivity(Intent.createChooser(intent, 
        context.getResources().getString(chooserLabelTitleId))); 
     } catch(Exception e) { 
     e.printStackTrace(); 
     } 
    } 

    public static void viewInExternalApplication(Context context, String url) { 
     Intent intent = new Intent( Intent.ACTION_VIEW); 
     intent.setData(Uri.parse(url)); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); 
     showActivityWithChooser(context, R.string.open_chooser_title, intent); 
    } 
} 

मुझे कोई देखें। किस प्राथमिक ने मुझे अनदेखा किया कि एंड्रॉइड को उपयोगकर्ता पसंद को लगातार बनाने में असमर्थ बनाया गया?

तस्वीरें देखें: छोड़ दिया संवाद है मैं देखना चाहते हैं क्या है, लेकिन अभी मैं क्या मिलता है (दोनों संवाद में आवेदनों की अलग संख्या अप्रासंगिक है):

enter image description here

+0

'हमेशा' का अर्थ चयन स्थायी बना देता है। आपके ऐप का इस संवाद को नियंत्रित करने का कोई तरीका नहीं है, इसका एंड्रॉइड का हिस्सा सीधे है। – mah

+0

@mah: आप बिंदु चूक गए। –

+1

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

उत्तर

16

एक रिकॉर्ड के लिए - यह अति-व्याख्या प्रकार का बग था (मेरा)। जो चयनकर्ता मैं उपयोग कर रहा था वह बिल्कुल सही तरफ छवि पर देखा जा सकता है। और यह हर समय दिखा रहा था क्योंकि ... मैं इसे हर समय बुला रहा था। मैंने गलत तरीके से माना कि चयनकर्ता "हमेशा | बस एक बार" कार्यक्षमता प्रदान करता है और यदि उपयोगकर्ता "हमेशा" टैप करता है तो दिखाई नहीं देगा (और अगर वह "बस एक बार" इस्तेमाल होता है तो दिखाया जाएगा)। लेकिन यह गलत है। Chooser हमेशा दिखाएगा क्योंकि यह इसकी भूमिका है - उपयोगकर्ता को चुनने दें। "हमेशा | बस एक बार" कार्यक्षमता अलग-अलग बात है - यह startActivity() और startActivityForResult() कॉल के लिए एंड्रॉइड फ्रेमवर्क की सुविधा है, और आवश्यकता होने पर स्वचालित रूप से दिखाई देगी - यदि एक से अधिक ऐप हैं (या ठीक है, एक से अधिक मिलान intent-filter) कुछ इरादा संभाल सकते हैं। यह तब दिखाई नहीं देगा यदि आपको केवल एक मिला है (या उपयोगकर्ता पहले "हमेशा" टैप किया गया था)। आप, डेवलपर को देखभाल करने की आवश्यकता नहीं है।

try { 
    context.startActivity(intent); 
} catch (....) 

और ढांचे बाकी करते हैं:

तो यह तय करने के लिए, मैं बस अपना viewInExternalApplication() कोड यह सिर्फ startActivity() फोन बनाने के लिए बदल दिया है।

+1

बिल्कुल मैं क्या समझना चाहता था! 10x – WindRider

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