2013-10-18 4 views
6

Ich habe ein Problem, die Empfänger-Telefonnummer aus dem eingehenden rohen SMS zu finden. Hier ist der Code, den ich versuche:Android: Wie bekomme ich Absender- und Empfänger-Telefonnummer von rohen SMS

Kann mir jemand sagen, wie man Empfänger Phonenummer von rohen SMS abrufen.

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

    } 
} 

Vielen Dank für Hilfe im Voraus!

+0

Die aktuellen Antworten zeigen nicht, wie die Nummer der empfangenden Partei zu erhalten. Ich werde das Kopfgeld auf eine Antwort vergeben, die die Telefonnummer bekommen kann, oder zeigen, dass das nicht möglich ist. –

+0

@DaveChen Die PDU-Metadaten für eine SMS-Nachricht enthalten nicht die Adresse des Empfängers und können daher nicht direkt aus einem eingehenden Text abgerufen werden. Es ist jedoch möglich, die Nummer eines Geräts zu überprüfen, indem das Gerät selbst einen Text sendet. –

Antwort

0

Try this:

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

Dies funktioniert nur auf Geräten, bei denen die Anzahl der SIM-Karte

+0

Das ist nicht die richtige Lösung, nach der ich suche. Wie erkennen Dual-SIM-Handys, welche SIM-Karte die SMS erhalten hat, obwohl die Telefonnummer nicht auf den SIM-Karten gespeichert ist? Allerdings suche ich nicht nach Gerät/SIM um mir die Telefonnummer mitzuteilen. Dies kann für weniger SIMs und nicht für alle funktionieren. Können Sie mir bitte sagen, ob es eine Möglichkeit gibt, die Empfänger-Telefonnummer von einer RAW-SMS zu erfahren, anstatt vom Gerät/SIM abhängig zu sein. – User12111111

+0

Ich hatte recherchiert, aber ich konnte nichts herausfinden. Ich denke, die Android-API unterstützt die Nummer des Empfängers nicht. Ich kann mich irren. – User12111111

+0

Ich weiß nichts anderes, das Ihnen helfen kann – ramaral

1

verwenden, um den Content-Provider

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

Keine richtige Lösung. Danke für die Antwort. Um es klar zu sagen, die Frage ist, wie man die Telefonnummer des Empfängers von einer RAW SMS erhält? – User12111111

3

TelephonyManager nicht die richtige Lösung ist gespeichert, Da in einigen Fällen die Nummer nicht auf der SIM-Karte gespeichert ist, sollten Sie aufgrund meines Vorschlags die gemeinsame Präferenz verwenden, um die Telefonnummer des Benutzers beim ersten Öffnen der Anwendung zu speichern. und danach wird die Nummer verwendet, wann immer Sie in der Anwendung brauchen.

Wenn Sie die Sender-Nummer erhalten möchten, Sie diese Methode nur in OnReceive von Rundruf, wenn Sie ein Bündel inistiaze Nachricht Inhalt erhalten

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

Der Beitrag beantwortet die Frage nicht. –

3

SMS von MAP geliefert wird, das ist ein Protokoll zwischen SIM und MSC/GMSC/SMSC (Einige Details here). Die SIM ist in dieser Zuordnung bereits identifiziert. Auch die SMS DELIVER enthält nicht die Empfängeradresse. Siehe this. Also, soweit ich weiß, gibt es keine direkte API für das, was Sie vielleicht aus den oben genannten Gründen gewünscht haben.

Verwandte Themen