2013-10-18 21 views
6

Tôi gặp sự cố khi tìm số điện thoại của người nhận từ SMS thô đến. Đây là mã mà tôi đang cố gắng:Android: cách nhận số điện thoại người gửi và người nhận từ sms thô

Ai đó có thể cho tôi biết cách lấy lại số nhận phonenumber từ SMS thô.

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

    } 
} 

Cảm ơn bạn đã trợ giúp trước!

+0

Câu trả lời hiện tại không cho biết cách nhận số của bên nhận. Tôi sẽ trao tiền thưởng cho một câu trả lời có thể lấy số điện thoại, hoặc cho thấy rằng nó không thể. –

+0

@DaveChen Siêu dữ liệu PDU cho một tin nhắn SMS không chứa địa chỉ của người nhận và do đó không thể truy xuất trực tiếp từ văn bản đến. Có thể, tuy nhiên, để xác minh số của thiết bị bằng cách để thiết bị tự gửi một văn bản. –

Trả lời

0

Hãy thử điều này:

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

này chỉ hoạt động trên các thiết bị có số được lưu trữ trên thẻ SIM

+0

Đó không phải là giải pháp đúng, mà tôi đang tìm kiếm. Làm thế nào để một điện thoại di động SIM kép nhận ra thẻ SIM nào nhận được tin nhắn SMS mặc dù số điện thoại không được lưu trong thẻ SIM? Tuy nhiên, tôi không tìm thiết bị/SIM để cho tôi biết số điện thoại. Điều này có thể làm việc cho ít SIM hơn và không phải tất cả. Bạn có thể vui lòng cho tôi biết nếu có khả năng biết số điện thoại của người nhận từ SMS RAW thay vì tùy thuộc vào thiết bị/SIM. – User12111111

+0

Tôi đã nghiên cứu về điều này nhưng tôi không thể tìm thấy bất kỳ. Tôi đoán, API android không hỗ trợ số của người nhận. Tôi có thể sai. – User12111111

+0

Tôi không biết bất cứ điều gì khác có thể giúp bạn – ramaral

1

sử dụng các nhà cung cấp nội dung

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

Không phải là giải pháp đúng. Cảm ơn vi đa trả lơi. Để rõ ràng, câu hỏi là làm cách nào để nhận số điện thoại của người nhận từ SMS RAW? – User12111111

3

TelephonyManager không phải là giải pháp đúng, Vì trong một số trường hợp, số điện thoại không được lưu trữ trong SIM, Do đề xuất của tôi, Bạn nên sử dụng Tùy chọn được chia sẻ để lưu số điện thoại của người dùng lần đầu tiên ứng dụng đang mở, và sau đó số sẽ được sử dụng bất cứ khi nào bạn cần trong ứng dụng.

Nếu bạn muốn Để có được số người gửi, bạn chỉ gọi phương pháp này trong onReceive của Broadcast khi bạn inistiaze một bó để có được nội dung thông điệp

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

Bài đăng không trả lời câu hỏi. –

3

SMS được phân phối bởi MAP đó là một giao thức giữa SIM và MSC/GMSC/SMSC (Một số chi tiết here). SIM đã được xác định trong liên kết này. Ngoài ra, SMS DELIVER không bao gồm địa chỉ người nhận. Xem this. Vì vậy, theo như tôi hiểu không có một API trực tiếp cho những gì bạn mong muốn có thể vì những lý do trên.

Các vấn đề liên quan