2011-06-24 21 views
10

पर बंडल कैसे जोड़ें I RecognizerIntent पर प्रतिक्रिया देने वाली गतिविधि को कार्यान्वित कर रहा हूं।पहचानकर्ता इंटेन्टेंट: लंबित इरादे

  • :

    • EXTRA_RESULTS_PENDINGINTENT
    • EXTRA_RESULTS_PENDINGINTENT_BUNDLE

    प्रलेखन Paraphrasing: दूसरों के बीच में इस गतिविधि दो भेजे एक्स्ट्रा कलाकार कि एक लंबित इरादे और अपने अतिरिक्त गठरी निर्दिष्ट संभाल चाहिए यदि आप का उपयोग PendingIntent की आपूर्ति के लिए करते हैं, तो resu एलटीएस को इसके बंडल में जोड़ा जाएगा और PendingIntent को अपने लक्ष्य में भेजा जाएगा।

  • यदि आप अग्रेषण उद्देश्यों की आपूर्ति के लिए EXTRA_RESULTS_PENDINGINTENT का उपयोग करते हैं, तो आप अंतिम इरादे के लिए अतिरिक्त अतिरिक्त आपूर्ति के लिए EXTRA_RESULTS_PENDINGINTENT_BUNDLE का भी उपयोग कर सकते हैं। खोज परिणाम इस बंडल में जोड़े जाएंगे, और संयुक्त बंडल को लक्ष्य पर भेजा जाएगा।

मैं नमूना कोड के लिए व्यर्थ दिख रहा हूं जो निम्नलिखित का प्रदर्शन करेगा।

एक बंडल से PendingIntent निकालने का सबसे अच्छा तरीका क्या है?

मुझे क्या करना चाहिए:

(PendingIntent) 
     extras.getParcelable(RecognizerIntent.EXTRA_RESULTS_PENDINGINTENT) 

कैसे एक PendingIntent की मौजूदा एक्स्ट्रा कलाकार के सेट करने के लिए अतिरिक्त जोड़ने के लिए?

संशोधित PendingIntent कैसे लॉन्च करें?

+0

कृपया नीचे दी गई लिंक देखें यह खोज का स्रोत है Dialog.java आप गहरा अध्ययन कर सकते हैं और आप अपना जवाब साफ़ कर सकते हैं। http://www.devdaily.com/java/jwarehouse/android/core/java/android/app/SearchDialog.java.shtml – Nikhil

उत्तर

1

ये इन सवालों के मेरे वर्तमान उत्तर हैं। यह इस तरह के कई Google ऐप्स (मैप्स, डॉक्स, यूट्यूब, सुनो) में काम करता है जो सभी को RecognizerIntent पर पास करते हैं जब आप माइक्रोफ़ोन बटन के माध्यम से खोज करते हैं। मैं अनिश्चित हूं हालांकि यह करने का यह सबसे अच्छा (या सबसे सामान्य) तरीका है। किसी भी टिप्पणी का स्वागत है।

एक बंडल से PendingIntent निकालने का सबसे अच्छा तरीका क्या है?

Parcelable extraResultsPendingIntentAsParceable = 
      bundle.getParcelable(RecognizerIntent.EXTRA_RESULTS_PENDINGINTENT); 
if (extraResultsPendingIntentAsParceable != null) { 
    if (extraResultsPendingIntentAsParceable instanceof PendingIntent) { 
     mExtraResultsPendingIntent = 
         (PendingIntent) extraResultsPendingIntentAsParceable; 
    } else { 
     // Report an error 
    } 
} 

mExtraResultsPendingIntentBundle = 
      bundle.getBundle(RecognizerIntent.EXTRA_RESULTS_PENDINGINTENT_BUNDLE); 

कैसे एक PendingIntent की मौजूदा एक्स्ट्रा कलाकार के सेट करने के लिए अतिरिक्त जोड़ने के लिए?

यहां हम केवल एक नया इरादा बनाते हैं और इसमें सभी आवश्यक अतिरिक्त स्थान डालते हैं।

if (mExtraResultsPendingIntentBundle == null) { 
    mExtraResultsPendingIntentBundle = new Bundle(); 
}    
Intent intent = new Intent(); 
intent.putExtras(mExtraResultsPendingIntentBundle); 
// Unsure about the following line... 
// Should I use another name for the extra data (instead of SearchManager.QUERY) 
intent.putExtra(SearchManager.QUERY, speechRecognitionResult); 

कैसे संशोधित PendingIntent शुरू करने के लिए?

हम PendingIntent को एक नया तर्क (नए एक्स्ट्रा के साथ) को तर्क के रूप में भेजते हैं।

try {   
    mExtraResultsPendingIntent.send(this, 1234, intent); 
} catch (CanceledException e) { 
    // Handle exception 
} 
+0

बंडल कहां से आता है? –

+1

@IgorG। मुझे यकीन नहीं है कि मैं समझता हूं ... उपर्युक्त कोड में सभी इनपुट अतिरिक्त से आता है। – Kaarel

+0

बस यह सुनिश्चित करना चाहता था कि आपका बंडल वैरिएबल जो मैंने माना है ... –

1

मैं आपको अपने दूसरे प्रश्न के साथ थोड़ी मदद देने में सक्षम हूं क्योंकि मैंने अपने ऐप में कुछ ऐसा किया है।

किसी इरादे में अतिरिक्त जोड़ना इरादे पर putExtra() को कॉल करना जितना आसान होना चाहिए। मैंने इसे अधिसूचना के लिए किया है।

Intent notificationIntent = new Intent(_context, MyActivity.class); notificationIntent.putExtra("SOME_ID", "VALUE");

यह एक सूचना है कि मेरी ऐप्लिकेशन को लॉन्च का हिस्सा है। जब मेरी गतिविधि फिर से शुरू होती है तो मैंने बाद में अतिरिक्त पढ़ा।

Intent intent = getIntent(); 
Bundle extras = intent.getExtras(); 
if(extras !=null) 
{ 
    String value = extras.getString("SOME_ID"); 
    if(value != null && value.equals("VALUE")) 
    { 
     //Value was found, do something 
    } 
} 

उम्मीद है कि इससे कुछ मदद मिलती है।

+2

धन्यवाद, लेकिन लंबित इंटेंटेंट इरादे के समान नहीं है। – Kaarel

4

सुरक्षा कारणों से आप लंबित इंटेन्टेंट की सामग्री को सीधे स्पर्श नहीं कर सकते हैं। हालांकि, जब आप लंबित इंटेन्टेंट भेजते हैं, तो आपके पास मूल निर्माता की अनुमति के आधार पर इसकी सामग्री को पूरक या संशोधित करने का अवसर होता है।

http://developer.android.com/reference/android/app/PendingIntent.html#send(android.content.Context, int, android.content.Intent, android.app.PendingIntent.OnFinished, android.os.Handler)

आशय तुम यहाँ की आपूर्ति PendingIntent से भेजे गए अंतिम संशोधित करने का ध्येय इस्तेमाल किया डेटा है:

यह विधि आपको PendingIntent भेजने के लिए उपयोग करना चाहते हैं।

क्या संशोधित किया जा सकता के लिए नियमों को यहां हैं:

http://developer.android.com/reference/android/content/Intent.html#fillIn(android.content.Intent, int)

ध्यान दें कि डिफ़ॉल्ट जब एक PendingIntent बनाई गई है द्वारा, केवल भागों है कि प्रेषक द्वारा संशोधित किया जा सकता एक्स्ट्रा कलाकार हैं। निर्माता अन्य हिस्सों को संशोधित करने की अनुमति देने के लिए झंडे में गुजर सकता है, हालांकि यह आम तौर पर वांछित नहीं होता है।

+0

धन्यवाद, यह वही है जो मैं बाद में था। – Kaarel

+1

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

+0

यदि मैं पीआई प्राप्त करने के लिए लंबित INTent.getBroadcast का उपयोग कर रहा हूं, तो मुझे इसे शुरू करने के लिए मजबूर करने के लिए किस विशेष कदम की आवश्यकता है, जिसमें मौजूदा इरादा अतिरिक्त रूप से पीआई के साथ बनाया गया था? मैं उपरोक्त विधि की कोशिश कर रहा हूं, लेकिन अतिरिक्त हमेशा शून्य हो जाते हैं। – Michael