2013-08-07 77 views
2

我最近成立,將收到短信,然後顯示它們作爲主要活動敬酒的應用程序。一旦應用程序收到短信,它將中止廣播並停止消息進入收件箱。接收應用短信只能從某些特定編號

目前,它這樣做與手機收到的所有消息,但我想,當由特定號碼收到短信就只能執行其任務,並顯示敬酒。我知道這是一個將if語句放入我的接收器代碼的例子,但我不太確定它應該放在哪裏。

SmsReceiver.java:

public class SmsReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    Bundle extras = intent.getExtras(); 


    if (extras ==null) 
     return; 
    //toast 
    Toast.makeText(context, "Received", Toast.LENGTH_LONG).show(); 

    Object[] pdus = (Object[]) extras.get("pdus"); 

    for (int i = 0; i < pdus.length; i++) { 
     SmsMessage SMessage = SmsMessage.createFromPdu((byte[]) pdus[i]); 
     String sender = SMessage.getOriginatingAddress(); 
     String body = SMessage.getMessageBody().toString(); 

     Intent in = new Intent("SmsMessage.intent.MAIN").putExtra("get_msg", sender+":"+body); 

     context.sendBroadcast(in); 
     this.abortBroadcast(); 

    } 
} 
} 

回答

1

你應該這樣做:

String body=.... 
if(PhoneNumberUtils.compare(sender, phoneNumber)) { 

      abortBroadcast() then do something... 
} 
1
if("123456789".equals(sender)) 
{ 
//do something 
} 
3

只要把波紋管

String body=.... 
    if(sender.equals(phoneNumber)) { 

       abortBroadcast() then do something... 
    } 

一定要儘快做abortBroadcast越好,因爲如果你之前做的很多業務,原收件箱將收到該消息。

+0

啊是這些似乎工作完美,謝謝。假設我希望數字來自一個變量,例如,如果我將數字存儲爲一個字符串變量,我該怎麼做? –

+0

變量i寫的「phoneNumber的」是String類型,因此將是相同的)。 SMessage.getOriginatingAddress()返回字符串格式的數字。 – JanBo

+0

但請記住電話號碼的前綴。如果我記得正確的話,手機總是會返回+44的號碼......或者區號是什麼。因此,您必須以相同的格式編寫電話號碼或執行一些字符串操作來比較不同的格式。 – JanBo