2012-10-27 2 views
1

j'ai écrit envoyer et recevoir des sms programme sucsessfully mais je veux que vérifier le numéro de téléphone du récepteur dans la méthode OnReceive. comment puis-je obtenir le numéro de téléphone de l'expéditeur à partir d'un sms reçu dans Android? J'ai écrit ce code mais ça a fonctionné !!! s'il vous plaît vérifier et m'aider.Un moyen d'obtenir le numéro de téléphone de l'expéditeur à partir d'un sms reçu sur Android?

public class SmsReceiver extends BroadcastReceiver { 
    public String str = ""; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     // ---get the SMS message passed in--- 

     Bundle bundle = intent.getExtras(); 
     SmsMessage[] msgs = null; 

     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]); 

       //for get sms from special number=============================== 
       String msg_from = msgs[i].getOriginatingAddress(); 
       Log.v("msg_from >>",msg_from);  
       if(msg_from.equals("08522215")) 
       { 
        //=============================== 
       str += "SMS from " + msgs[i].getOriginatingAddress(); 
       str += " :"; 
       str += msgs[i].getMessageBody().toString(); 
       str += "\n"; 
      } 

      } 
      // ---display the new SMS message--- 
      // Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 
      Intent act = new Intent(context, MainActivity.class); 
      act.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      act.putExtra("message", str); 
      context.startActivity(act); 
     } 

     abortBroadcast(); 
     } 
    } 

manifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.sms" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="7" 
     android:targetSdkVersion="15" /> 

    <uses-permission android:name="android.permission.SEND_SMS"> 
    </uses-permission> 
    <uses-permission android:name="android.permission.RECEIVE_SMS"> 
    </uses-permission> 

<uses-permission android:name="android.permission.READ_SMS" /> 
    <application android:icon="@drawable/ic_launcher" android:label="@string/app_name"> 
     <activity android:name=".SMS" 
        android:label="@string/app_name"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity android:name=".MainActivity" 
        android:label="@string/app_name"/> 
     <receiver 
      android:name="com.example.sms.SmsReceiver" 
      class="com.example.sms.SmsReceiver" > 
      <intent-filter android:priority="100" > 
       <action android:name="android.provider.Telephony.SMS_RECEIVED" /> 
      </intent-filter> 
     </receiver> 


    </application> 


</manifest> 

Répondre

1

Dans l'objet de paquet lui-même le numéro de l'expéditeur est reçu.

+0

Voulez-vous dire ce que je dis !!!!? – user1770370

+0

J'ai écrit mon code ... juste s'il vous plaît vérifié mon code. – user1770370

+0

Vous ne pouvez pas envoyer le numéro d'expéditeur en bundle ... c'est une implémentation interne. – drulabs

1

écrire ceci dans le récepteur de radiodiffusion

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]); 
     } 
     String receivedMessage = smsMessage[0].getMessageBody().toString().toUpperCase(); 
     String originatingAddress = smsMessage[0].getOriginatingAddress(); 
     originatingAddress = (originatingAddress!=null && originatingAddress.length()>3)?(originatingAddress.substring(3)):("") ; 

L'adresse d'origine est au-dessus en fait le numéro de l'expéditeur ...

EDIT

vous avez probablement utilisé

android.telephony.gsm.SmsMessage 

c'est obsolète. Utilisez ceci:

android.telephony.SmsMessage 
+0

où dans mon code est faux? pourquoi mon code n'a pas fonctionné? – user1770370

+0

votre code n'a pas fonctionné !!! Je l'ai testé. Ce – user1770370

+0

est un code de travail que je l'utilise dans 3 de mes applications ... En tout cas je vous reçu e-mail, vous répondra après avoir vérifié ... Je – drulabs

-1

Essayez le code suivant

Ne pas oublier de donner SMS obtiennent la permission dans le fichier manifeste

<uses-permission android:name="android.permission.RECEIVE_SMS"> 
</uses-permission> 





public class SmsReceiver extends BroadcastReceiver{ 

private Intent intent; 
@Override 
public void onReceive(Context context, Intent intent) { 
    // TODO Auto-generated method stub 

/* ************** BIG COMMENT STARTS ******* 
    //---get the SMS message passed in--- 
    Bundle bundle = intent.getExtras(); 

    SmsMessage[] msgs = null; 
    SmsMessage[] phonenum =null;// 

    String str = ""; 
    String PhoneNUMBER =""; // 

    if (bundle != null) 
    { 

     //---retrieve the SMS message received--- 
     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 += "SMS from " + msgs[i].getOriginatingAddress();      
      str += " :"; 
      str += msgs[i].getMessageBody().toString(); 
      str += "\n";   
     } 


     //---retrieve the SMS senders number --- 
     phonenum = new SmsMessage[pdus.length]; 
     for (int i = 0; i < phonenum.length; i++) { 
      phonenum[i]=SmsMessage.createFromPdu((byte[])pdus[i]); 
      PhoneNUMBER += phonenum[i].getOriginatingAddress(); 
     } 


     //---display the new SMS message--- 
     Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 
     Toast.makeText(context, PhoneNUMBER, Toast.LENGTH_LONG).show(); 







    } 
Questions connexes