2014-09-02 56 views
1

我的應用程序使用一些網絡服務來執行服務器中的操作並從中獲取結果。現在我希望我的應用能夠在離線模式下工作。我有一個可以處理髮送和接收消息給客戶的短信面板。所以我需要的是聽取客戶端中的消息,並且如果它有特殊的格式,則對其進行響應。我知道如何從代碼收聽傳入短信,這裏是:android隱藏用戶的特殊短信通知並將其從收件箱中刪除

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; 
    Log.d("checking", "sms received!"); 
    String str = ""; 
    if (bundle != null) { 
     // ---retrieve the SMS message received--- 
     Object[] pdus = (Object[]) bundle.get("pdus"); 
     msgs = new SmsMessage[pdus.length]; 
     String sender = null; 
     String body = null; 
     for (int i = 0; i < msgs.length; i++) { 
      msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
      str += "SMS from " + msgs[i].getOriginatingAddress(); 
      sender = msgs[i].getOriginatingAddress(); 
      str += " :"; 
      str += msgs[i].getMessageBody().toString(); 
      body = msgs[i].getMessageBody().toString(); 
      str += "\n"; 
     } 
     // ---display the new SMS message--- 
     Toast.makeText(context, str, Toast.LENGTH_SHORT).show(); 

    } 
} 
} 

它工作正常。這裏的事情是我不希望我的特殊消息出現在用戶收件箱中,甚至不需要隱藏他的短信通知。這可能嗎?我應該聽所有傳入的消息嗎?

更新: 我認爲事情在奇巧不同,所以任何解決方案的工作所理解的API 19。 感謝先進。

+1

如果你需要這個工作在KitKat,你的應用程序將必須是默認的短信應用程序。但即使如此,它並不能保證在任何地方都能正常工作,因爲無法從「KitKat」開始中止「SMS_RECEIVED」廣播。 – 2014-09-02 05:45:07

+1

@Mohamad Ghafourian:正如Mike所說,它不能在Kit Kat上中止,請查看提供給此問題的鏈接: – 2014-09-02 05:51:09

+0

http://stackoverflow.com/questions/20109450/abort-sms-intent-on-android -kitkat – 2014-09-02 05:51:44

回答

1

BroadcastReceiver

if (intent.getAction().equals(android.provider.Telephony.SMS_RECEIVED)) { 
    abortBroadcast(); 
} 

嘗試abortBroadcast();我不知道,如果這個工程上奇巧與否。

+3

僅供參考,這不適用於KitKat。 – 2014-09-02 05:42:37