2011-08-15 15 views
5

तो यह है मेरी BroadcastReceiverमैं ब्रॉडकास्ट रिसीवर से एक एसएमएस कैसे भेज सकता हूं और इसकी स्थिति जांच सकता हूं?

public class IncomingSMSListener extends BroadcastReceiver { 
private static final String SMS_EXTRA_NAME = "pdus"; 

@Override 
public void onReceive(Context context, Intent intent) { 
    SmsMessage[] messages = fetchSMSMessagesFromIntent(intent); 
} 

private SmsMessage[] fetchSMSMessagesFromIntent(Intent intent) { 
    ArrayList<SmsMessage> receivedMessages = new ArrayList<SmsMessage>(); 
    Object[] messages = (Object[]) intent.getExtras().get(SMS_EXTRA_NAME); 
    for (Object message : messages) { 
     SmsMessage finalMessage = SmsMessage 
       .createFromPdu((byte[]) message); 
     receivedMessages.add(finalMessage); 
    } 
    return receivedMessages.toArray(new SmsMessage[0]); 
} 

}

मैं बस ठीक है और सभी आने वाली संदेश पढ़ा, लेकिन मान लीजिए कि यहाँ से मैं एक और फोन नंबर के लिए संदेश अग्रेषित करना चाहते हैं यह बताने के लिए सक्षम किया जा रहा हूँ और सुनिश्चित करें कि यह भेजा गया है। मुझे पता है कि मैं SmsManager.sendTextMessage() कर सकता हूं लेकिन मैं PendingIntent भाग कैसे स्थापित कर सकता हूं ताकि यह सूचित किया जा सके कि एसएमएस भेजा गया है या नहीं?

उत्तर

6

ठीक है, अंत में समाधान ढूंढने के लिए समाप्त हो गया। चूंकि ब्रॉडकास्ट रिसीवर में ऑनसेसिव() विधि में पारित संदर्भ मुझे अन्य ब्रॉडकास्ट रिसीवर को "संदेश भेजे गए" ईवेंट को सुनने के लिए पंजीकरण नहीं करने देता है, इसलिए मैंने ऐप संदर्भ की पकड़ प्राप्त कर ली और निम्नानुसार किया:

BroadcastReceiver में:

SmsManager smsManager = SmsManager.getDefault(); 
    Intent intent = new Intent(SENT_SMS_FLAG); 
    PendingIntent sentIntent = PendingIntent.getBroadcast(context, 0, 
      intent, 0); 
    SMSForwarderApp.getAppContext().registerReceiver(
      new MessageSentListener(), 
      new IntentFilter(SENT_SMS_FLAG)); 
    smsManager.sendTextMessage("Here goes the destination of the SMS", null, 
      "Here goes the content of the SMS", sentIntent, null); 

SENT_SMS_FLAG बस एक स्थिर स्ट्रिंग है जो विशिष्ट आशय मैं सिर्फ बनाया पहचान करती है। मेरे MessageSentListener इस तरह दिखता है:

public class MessageSentListener extends BroadcastReceiver{ 

@Override 
public void onReceive(Context context, Intent intent) { 
    int resultCode = this.getResultCode(); 
    boolean successfullySent = resultCode == Activity.RESULT_OK; 
    //That boolean up there indicates the status of the message 
    SMSForwarderApp.getAppContext().unregisterReceiver(this); 
      //Notice how I get the app context again here and unregister this broadcast 
      //receiver to clear it from the system since it won't be used again 
} 

}

+0

आप MessageSentListener का पंजीकरण रद्द नहीं किया है, तो आप एक से अधिक प्रविष्टियों, एक समस्या मैं का सामना करना पड़ रहा था का सामना कर सकता है। धन्यवाद! –

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