2013-01-08 39 views
5

मेरे पास दो अलग-अलग डेटा एसएमएस प्रसारण के साथ दो एप्लिकेशन हैं और मैं दोनों में डेटा एसएमएस प्राप्त करना चाहता हूं। कि मैं एप्लिकेशन 1 में प्रत्येक अनुप्रयोगदो अलग-अलग बंदरगाहों में डेटा एसएमएस कैसे प्राप्त करें

रिसीवर एक में प्रसारण बनाया है:

<receiver android:name=".SMSReceiver" > 
      <intent-filter android:priority="10" > 
       <action android:name="android.intent.action.DATA_SMS_RECEIVED" /> 
       <data android:scheme="sms" /> 
       <data android:port="5555" /> 
      </intent-filter> 
    </receiver> 

रिसीवर दो एप्लिकेशन दो में:

<receiver android:name=".SMSReceiver1" > 
      <intent-filter android:priority="10" > 
       <action android:name="android.intent.action.DATA_SMS_RECEIVED" /> 
       <data android:scheme="sms" /> 
       <data android:port="8901" /> 
      </intent-filter> 
    </receiver> 

अब परिदृश्य इस, एसएमएस पहले में ही प्राप्त है स्थापित ऐप, मैंने एक ही बंदरगाहों, कक्षा के नाम और विभिन्न के साथ भी कोशिश की है। लेकिन समस्या हल नहीं हुई, मैं इसे कैसे हल कर सकता हूं ?? यहाँ मेरी प्रसारण रिसीवर वर्ग

public class SMSReceiver extends BroadcastReceiver { 



    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle myBundle = intent.getExtras(); 

     SmsMessage[] messages = null; 
     String strMessage = ""; 
     byte[] data = null; 

     if (myBundle != null) { 

      Object[] pdus = (Object[]) myBundle.get("pdus"); 
      messages = new SmsMessage[pdus.length]; 

      for (int i = 0; i < messages.length; i++) { 
       messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
       phoneNo = messages[i].getOriginatingAddress(); 
       try { 
        data = messages[i].getUserData(); 

       } catch (Exception e) { 

       } 
       if (data != null) { 
        for (int index = 0; index < data.length; ++index) { 
         strMessage += Character.toString((char) data[index]); 
        } 
       } 

      } 

      message = strMessage; 


      System.out.println("message received: " + message); 

    } 
} 

और संदेश भेजने

SmsManager smsManager = SmsManager.getDefault(); 
      smsManager.sendDataMessage(myNumber, null,(short)8901, sms.getBytes(), null, null); 
+0

यह एक पुरानी धागा है में इस सेट लेकिन मैं एक है डेटा एसएमएस के बारे में सवाल। क्या आप मुझे बता सकते हैं कि वे वास्तव में क्या हैं और क्या उन्हें बंदरगाहों से अवरुद्ध किया जा सकता है क्योंकि बंदरगाहों पर विचार किया जा रहा है? – user1437328

उत्तर

1

दोहरी जांच करने के लिए चीजों की युगल के लिए अपने कोड है:

क) क्या आप वाकई दोनों में android.permission.RECEIVE_SMS अनुमति जोड़ लिया है कर रहे हैं अनुप्रयोगों?

बी) क्या आप इस टुकड़े को दोनों मैनिफ़ेस्ट से हटा सकते हैं ताकि यह सुनिश्चित किया जा सके कि इरादा फ़िल्टरिंग गड़बड़ न हो?

<data android:scheme="sms" /> 
<data android:port="5555" /> 

सी) यदि बी) काम करेगा, तो आप अपने रिसीवर कोड में फ़िल्टरिंग करने में रुचि ले सकते हैं।

+0

मुझे बी का प्रयास करना है) लेकिन अब कोई ऐप संदेश प्राप्त नहीं कर रहा है। – Talha

+0

मैं एक-एक करके कोशिश कर रहा हूं कि हमें <डेटा एंड्रॉइड: पोर्ट = "एसएमएस" /> टैग को एसएमएस – Talha

1

एक अलग बंदरगाह से एसएमएस प्राप्त करने के लिए, अपने AndroidManifest.xml में इस रिसीवर सेट

<receiver android:name=".SMSBcastReceiver"> 
    <intent-filter android:priority="10"> 
    <action android:name="android.intent.action.DATA_SMS_RECEIVED" /> 
<data android:scheme="sms" /> 
     <data android:port="13013" /> 
</intent-filter> 
</receiver> 

फिर अपने SMSBcastReceiver वर्ग

public void onReceive(final Context context, Intent intent) { 

Bundle bundle = intent.getExtras(); 

Object messages[] = (Object[]) bundle.get("pdus"); 
SmsMessage smsMessage[] = new SmsMessage[messages.length]; 

for (int n = 0; n < messages.length; n++) 
{ 
smsMessage[n] = SmsMessage.createFromPdu((byte[]) messages[n]); 
} 

smsOrigin = smsMessage[0].getDisplayOriginatingAddress(); 
smsData = smsMessage[0].getUserData(); 

for(int index=0; index<smsData.length; ++index) 
{ 
smsBody += Character.toString((char)smsData[index]); 
} 
} 
+0

प्राप्त करने के लिए रखना है, मैं वर्तमान में यह सब कर रहा हूं लेकिन समस्या यह है कि मैं दो एसएमएस प्रसारण रिसीवर चलाने के लिए चाहता हूं, I इसे एक काम से पूरी तरह से करने की कोशिश की लेकिन उनमें से दोनों एक ही समय में नहीं चलते हैं। – Talha