안녕하세요.
스팸을 잡아주는 앱을 연습삼아 만들어 보고 있는데요.
"누구야!"라는 앱이 실제 송신번호와 표시되는 번호가 틀린 SMS를 찾아주는 기능이 있어서
저도 그 기능도 포함할려고 연구중... SmsMessage 클래스에 번호를 가져오는 메소드가 두가지가 있어서
실행을 해 봤더니 getOriginatingAddress() 메소드는 실제 송신자 번호를 알려주고 getDisplayOriginatingAddress() 메소드는 표시되는 번호를 알려주네요.

SKT에 겔럭시s(프로요 정펌)에서 잘 되네요. 

다른 폰이나 통신사는 어떤지 궁금하네요.

아래 소스 참조용 BR 소스입니다.

public class SMSReceiver extends BroadcastReceiver {
private static final String ACTION_SMS = "android.provider.Telephony.SMS_RECEIVED";

@Override
public void onReceive(Context pCtx, Intent pIntent) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(pCtx); 
if ( prefs.getBoolean("prefEnabled",false) && pIntent.getAction().equals(ACTION_SMS)) {
Object[] pdus = (Object[]) pIntent.getExtras().get("pdus");
SmsMessage msgs[] = new SmsMessage[pdus.length];
for (int i = 0; i <msgs.length; i++) {
msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);
}
SpamKillerDao dao = new SpamKillerDao(pCtx);
SMS sms = new SMS();
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
for (int i = 0; i <msgs.length; i++) {
sms.body = msgs[i].getMessageBody();
sms.sender_org = msgs[i].getOriginatingAddress();
sms.sender_dis = msgs[i].getDisplayOriginatingAddress();
sms.time = dateformat.format(new Date(msgs[i].getTimestampMillis()));
}
dao.insertBlockedSpam(sms);
}
}
}