2012-03-14 5 views
8

मैं एक Android App से एसएमएस संदेश भेजने के लिए कोशिश कर रहा हूँ। मैं लंबित इंटेंट का उपयोग कर रहा हूं ताकि मैं ब्रॉडकास्ट रिसीवर का उपयोग यह जांचने के लिए कर सकूं कि यह ठीक से भेजा गया था या नहीं। चूंकि SendTextMessage कॉल प्रति एसएमएस किया जाएगा, मुझे वास्तविक एसएमएस की पहचान करने के लिए कुछ "अतिरिक्त" डेटा भेजने की आवश्यकता है, ताकि मेरा प्रसारण प्राप्त एक विशिष्ट एसएमएस संदेश पर कुछ काम कर सके।एंड्रॉयड PendingIntent अतिरिक्त

यहाँ

है मेरी भेजने कोड:

 String SENT = "SMS_SENT"; 

     Intent sentIntent = new Intent(SENT); 
     sentIntent.putExtra("foo", "BAR"); 
     PendingIntent sentPI = PendingIntent.getBroadcast(baseContext, 0, 
      sentIntent, 0); 

     PendingIntent deliveredPI = PendingIntent.getBroadcast(baseContext, 0, 
      new Intent(DELIVERED), 0); 

     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(smsMessage.getNumber(), null, smsMessage.getText(), sentPI, deliveredPI); 

समस्या यह है कि मेरे प्रसारण रिसीवर में, यह मेरी अतिरिक्त "foo" को पढ़ने के लिए नहीं कर पा रहे:

public class SMSSentBroadcastReceiver extends BroadcastReceiver { 

    @Override 
     public void onReceive(Context arg0, Intent intent) { 
     String smsID = intent.getStringExtra("foo"); 
     ...... 
     } 
    } 

SMSID सिर्फ अशक्त हो जाता है ।

मेरे प्रसारण रिसीवर इसलिए की तरह पंजीकृत है:

baseContext.registerReceiver(new SMSSentBroadcastReceiver(), new IntentFilter("SMS_SENT")); 

यह देखते हुए कि लक्ष्य फ़िल्टर काम कर रहा है, मैं गलत क्या कर रहा हूँ? एक्स्ट्रा भी क्यों नहीं भेजे जाते हैं?

किसी भी मदद की सराहना की है। धन्यवाद

+0

अपने PendingIntent.getBroadcast में, यदि आप कुछ अद्वितीय अनुरोध कोड गुजरती हैं, SMSID अभी भी रिक्त है? (उदाहरण के लिए, 'लंबित INTent.getBroadcast (बेसकॉन्टेक्स्ट, 99, भेजा गया, 0) ' – dule

+0

उत्कृष्ट! वह काम किया। यदि आप इसे उत्तर के रूप में रखते हैं, तो मैं स्वीकार करूंगा :) हालांकि, आपको एक अद्वितीय अनुरोध कोड क्यों चाहिए? इससे पहले, मैं बस इसे 0 पर सेट कर रहा था जो ऐसा प्रतीत नहीं होता था। – jtnire

उत्तर

14

मुझे क्या संदेह है (कम से कम, यह मेरे साथ हुआ है), यह है कि आप पहले कहीं और एसएमएस_एसईएनटी इरादे का उपयोग कर रहे हैं, जिससे उस समय, उस इरादे में अतिरिक्त में "foo" नहीं है । उसी इरादे और अनुरोध कोड के साथ लंबित Intent.getBroadcast को कॉल करना आपको मूल लंबित इरादा वापस कर देगा।

यदि यह वास्तव में एक ही इरादा होने का मतलब है, तो आपको नए एक्स्ट्रा के साथ इरादे को अपडेट करने के लिए PendingIntent.FLAG_UPDATE_CURRENT जैसे कुछ उपयोग करने की आवश्यकता है। यदि यह एक ही इरादा नहीं माना जाता है, तो इसका एक अलग अनुरोध कोड होना चाहिए, ताकि यह दूसरे इरादे से मेल नहीं खाती (यही कारण है कि एक अद्वितीय अनुरोध कोड में काम करना)।

+0

मुझे 100% यकीन है कि foo हमेशा एक अतिरिक्त के रूप में सेट किया गया था। लेकिन मैं पुष्टि कर सकता हूं कि "समान" लंबित इरादे को दो बार बुलाया गया था क्योंकि 2 एसएमएस संदेश भेजे जाने की कोशिश कर रहे थे। मुझे लगता है कि यह वास्तव में एसडीके में एक बग .... – jtnire

+0

मुझे यकीन है कि तो क्यों अतिरिक्त हमेशा वहाँ नहीं होगा नहीं कर रहा हूँ हो सकता है (मेरे लिए, यह वहाँ था, लेकिन गलत था, यानी बासी)। मुझे किसी भी बग के बारे में पता नहीं है जो इसका कारण बनता है, मैं आमतौर पर ऐसा लगता हूं कि एसडीके के साथ कुछ गलत होने से मुझे कुछ याद आ रहा है :) – dule

+0

@dule, आप कमाल हैं! इस समस्या ने मुझे कई घंटे तक यातना दी है जब तक कि मुझे आपका जवाब नहीं मिला। – neevek