2012-07-11 17 views
7

मैंने अपने आवेदन पर एसएमएस प्राप्त करने के लिए एक ट्यूटोरियल का पालन किया और टोस्ट को एसएमएसबॉडी पास करने के लिए इसे पढ़ा। जो रिसीवर कक्षा है।एंड्रॉइड ऐप पर एसएमएस प्राप्त करना

public class SmsReciever extends BroadcastReceiver { 
     @Override 
     public void onReceive(Context context, Intent intent){ 
     Bundle bundle= intent.getExtras(); 
     SmsMessage[] msgs= null; 
     String str=""; 
     if(bundle != null){ 
      Object [] pdus=(Object[]) bundle.get("pdus"); 
      msgs=new SmsMessage[pdus.length]; 
      for(int i=0; i< msgs.length;i++){ 
       msgs[i]= SmsMessage.createFromPdu((byte[])pdus[i]); 
       str+= msgs[i].getMessageBody(); 

      } 
      Toast.makeText(context, str, Toast.LENGTH_LONG).show(); 
     } 
     } 

    } 

मैनिफ़ेस्ट फ़ाइल

<receiver android:name="com.msoft.masrooq.SmsReciever"> 
    <intent-filter> 
    <action android:name="android.provider.telephony.SMS_RECIEVED"></action> 
    </intent-filter> 
    </receiver> 
     <uses-permission android:name="android.permission.RECEIVE_SMS"/> 
      <uses-permission android:name="android.permission.READ_SMS" /> 

एप्लिकेशन ठीक शुरू होता है, लेकिन यह एसएमएस प्राप्त यह कुछ भी नहीं है के जवाब नहीं है।

+0

मैं कुछ ऐसा ही कर रहा हूं !!! http://stackoverflow.com/questions/14452808/sending-and-receiving-mms-in-android – toobsco42

+0

इस सरल ट्यूटोरियल की जांच करें http://tech-papers.org/receive_sms_from_android_app/ –

उत्तर

19

यहां एसएमएस संदेश प्राप्त करने का मेरा कार्यान्वयन है। एसएमएस संदेश कई में टूटा जा सकता है, ध्यान दें कि इसका इलाज कैसे किया जाता है। android:priority विशेषता भी देखें।

public class SmsReceiver extends BroadcastReceiver { 

    private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(SMS_RECEIVED)) { 
      Bundle bundle = intent.getExtras(); 
      if (bundle != null) { 
       // get sms objects 
       Object[] pdus = (Object[]) bundle.get("pdus"); 
       if (pdus.length == 0) { 
        return; 
       } 
       // large message might be broken into many 
       SmsMessage[] messages = new SmsMessage[pdus.length]; 
       StringBuilder sb = new StringBuilder(); 
       for (int i = 0; i < pdus.length; i++) { 
        messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
        sb.append(messages[i].getMessageBody()); 
       } 
       String sender = messages[0].getOriginatingAddress(); 
       String message = sb.toString(); 
       Toast.makeText(context, message, Toast.LENGTH_SHORT).show(); 
       // prevent any other broadcast receivers from receiving broadcast 
       // abortBroadcast(); 
      } 
     } 
    } 
} 

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.smsreceiver" 
    android:versionCode="1" 
    android:versionName="1.0"> 
    <uses-sdk android:minSdkVersion="4" /> 
    <uses-permission android:name="android.permission.RECEIVE_SMS" /> 
    <application android:icon="@drawable/icon" android:label="@string/app_name"> 
     <activity 
      android:name=".SmsLoggerActivity" 
      android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <receiver android:name="com.example.smsreceiver.SmsReceiver" android:enabled="true"> 
      <intent-filter android:priority="2147483647"> 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 
    </application> 
</manifest> 

कुछ नोट: आप एक्सएमएल में अपने रिसीवर की घोषणा तो तुलना प्रणाली आपके आवेदन की परवाह किए बिना अपने रिसीवर का उपयोग कर सकते कभी शुरू किया गया था। चूंकि एंड्रॉइड 1.6 प्राप्त किए गए एसएमएस संदेशों के बारे में अधिसूचनाएं आदेशित ब्रॉडकास्ट के रूप में वितरित की जाती हैं, इसलिए आप <intent-filter> का उपयोग कर सकते हैं ताकि सिस्टम आपके एप्लिकेशन पर पहले एसएमएस भेज सके (आप abortBroadcast() को भी कॉल कर सकते हैं ताकि अन्य एप्लिकेशन एसएमएस प्राप्त नहीं कर सकें , उदाहरण के लिए मूल एसएमएस ऐप)। भूलें कि प्रसारण रिसीवर के संचालन को निष्पादित करने के लिए लगभग 10 सेकंड हैं, अन्यथा इसे नौकरी खत्म करने से पहले समय-समय पर समाप्त कर दिया जा सकता है।

+0

+1 बस एक सिर ऊपर, एंड्रॉइड। allow.SEND_SMS और android.permission.RECEIVE_SMS अलग हैं। और आपकी मुख्य गतिविधि में बस एक ऑब्जेक्ट SmsReceiver() बनाएं। – Sydwell

+0

एमएमएस के लिए इसे कैसे लागू किया जाएगा? – Arya

2

प्रसारण केस-संवेदी हैं। का प्रयोग करें "android.provider टेलीफोनी .SMS_RECEIVED।" नहीं "android.provider टेलीफोनी .SMS_RECEIVED।"

इसके अलावा, मैं भी एक वर्ग सेट है, लेकिन मुझे यकीन है कि यह अनिवार्य कर दिया है नहीं कर रहा हूँ:

<intent-filter> 
    <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
    <category android:name="android.intent.category.DEFAULT" /> 
</intent-filter> 
संबंधित मुद्दे