2013-10-18 16 views
6

Ho riscontrato un problema nel trovare il numero di telefono del destinatario dagli SMS non elaborati in arrivo. Ecco il codice che sto cercando:Android: come ottenere il numero di telefono del mittente e del destinatario da sms primari

Qualcuno può dirmi come recuperare il numero di telefono del ricevitore da SMS non elaborati.

public class SMSReceiver extends BroadcastReceiver { 

private Context context; 

@Override 
public void onReceive(Context context, Intent intent) { 
    this.context = context; 
    // Parse the SMS. 
    Bundle bundle = intent.getExtras(); 
    SmsMessage[] msgs = null; 
    String str = ""; 
    if (bundle != null) 
    { 
     // Retrieve the SMS. 
     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]); 
      //appending to str String. 
      str += "OriginatingAddress: "; 
      str += msgs[i].getOriginatingAddress(); 
      str += " :\n"; 
      str += " :\n"; 
      str += "DisplayOriginatingAddress: "; 
      str += msgs[i].getDisplayOriginatingAddress(); 
      str += " :\n"; 
      str += " :\n"; 
      str += "DisplayMessageBody: "; 
      str += msgs[i].getDisplayMessageBody(); 
      str += " :\n"; 
      str += " :\n"; 
      str += "MessageBody: "; 
      str += msgs[i].getMessageBody(); 
     } 
     Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 

    } 
} 

Grazie per l'aiuto in anticipo!

+0

Le risposte correnti non mostrano come ottenere il numero della parte ricevente. Assegnerò la taglia su una risposta che può ottenere il numero di telefono o mostrare che non è possibile. –

+0

@DaveChen I metadati PDU per un messaggio SMS non contengono l'indirizzo del destinatario e pertanto non possono essere recuperati direttamente da un testo in entrata. È possibile, tuttavia, verificare il numero di un dispositivo facendo in modo che il dispositivo invii a se stesso un testo. –

risposta

0

Prova questa:

TelephonyManager manager =(TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE); 
mPhoneNumber = manager.getLine1Number(); 

Questo funziona solo su dispositivi in ​​cui il numero è memorizzato nella scheda SIM

+0

Questa non è la soluzione corretta, che sto cercando. In che modo un cellulare con doppia SIM riconosce quale carta SIM ha ricevuto l'SMS anche se il numero di telefono non è stato salvato nelle carte SIM? Tuttavia, non sto cercando dispositivo/SIM per dirmi il numero di telefono. Questo potrebbe funzionare con meno SIM e non tutte. Potete dirmi se esiste la possibilità di conoscere il numero di telefono del destinatario da un SMS RAW anziché a seconda del dispositivo/SIM. – User12111111

+0

Avevo studiato su questo ma non sono riuscito a scoprirlo. Suppongo che l'API di Android non supporti il ​​numero del destinatario. Potrei sbagliarmi. – User12111111

+0

Non so nient'altro che possa esserti d'aiuto – ramaral

1

utilizzare il provider di contenuti

Uri uri = Uri.parse("content://sms"); 
Cursor messageCursor = cr.query(uri, new String[] { "_id", "thread_id", "address", "date", "type", "body"}, null , null, "date" + " ASC"); 

messageCursor.moveToFirst(); 

String address = messageCursor.getString(messageCursor.getColumnIndex("address")); 
String type = messageCursor.getString(messageCursor.getColumnIndex("type")); 



.... 
+0

Non è una soluzione corretta. Grazie per la risposta. Per essere chiari, la domanda è come ottenere il numero di telefono del destinatario da un SMS RAW? – User12111111

3

TelephonyManager non è la soluzione giusta, Perché in alcuni casi il numero non è memorizzato nella SIM, a causa del mio suggerimento, dovresti usare Preferenze condivise per memorizzare il numero di telefono dell'utente la prima volta che l'applicazione è aperta, e dopo che il numero verrà utilizzato ogni volta che è necessario in applicazione.

Se si desidera Per ottenere il numero del mittente, si chiama questo metodo solo in OnReceive di Broadcast quando si inistiaze un fascio per ottenere contenuto dei messaggi non

messsage[0].getOriginatingAddress(); 
-1
public class SmsReceiver extends BroadcastReceiver 
{ 
@Override 
    public void onReceive(Context context, Intent intent) 
    { 


//---get the SMS message passed in--- 
    Bundle bundle = intent.getExtras();   
    SmsMessage[] msgs = null; 
    String str = "";    
    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();      
      // here you retrieve receiver phonenumber 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(); 


}       
} 
} 
+0

Il post non risponde alla domanda. –

3

SMS viene consegnato da MAP, che è un protocollo tra SIM e MSC/GMSC/SMSC (alcuni dettagli here). La SIM è già identificata in questa associazione. Anche SMS DELIVER non include l'indirizzo del destinatario. Vedi this. Quindi, per quanto ne so, non esiste un'API diretta per quello che hai desiderato, forse per le ragioni sopra esposte.

Problemi correlati