接收短信是否有可能爲我的應用程序接收來自特定電話號碼的短信,不讓它trig的系統通知,但讓所有其他消息傳遞給被正常處理的默認短信應用?安卓:從特定的電話號碼
如果是這樣,怎麼可以在系統知道哪個進程是第一隊列挑接收哪些消息?
接收短信是否有可能爲我的應用程序接收來自特定電話號碼的短信,不讓它trig的系統通知,但讓所有其他消息傳遞給被正常處理的默認短信應用?安卓:從特定的電話號碼
如果是這樣,怎麼可以在系統知道哪個進程是第一隊列挑接收哪些消息?
我沒有嘗試這一點,但理論上它應該工作:
在Android短信廣播發送爲ordered broadcast,這意味着接收器按順序處理,並可以取消廣播。見SMSDispatcher.java,線420
爲了先調用,接收機必須具有更高的優先級,然後其他人。
<intent-filter android:priority="1000" >
. . .
</intent-filter>
取消廣播電話broadcastReceiver.setResultCode(RESULT_CANCELED)
。這樣,SMS廣播將被取消,並且不會被系統SMS應用程序(和SMS通知器)顯示。
更新:
也可以嘗試使用broadcastReceiver.setResultCode(Intents.RESULT_SMS_HANDLED)
。
更新2:
user672601的另一種回答指出,這確實是工作,但他用abortBroadcast()
廣播接收器內。
我不認爲它的可能....因爲android給我們只監聽事件的廣播監聽器。所以你必須閱讀每封郵件,並檢查其是否你的號碼,做其他的操作就忽視它....缺省消息傳遞應用程序會自動處理它....
我第二個farhan它不可能的數量的原因。任何人都可以用這種津貼做任何事情。檢查了這一點的詳細信息http://groups.google.com/group/android-developers/browse_thread/thread/78fecbc156f4a1ea
彼得Knego的答案是正確的。我試圖做這件事,嘗試了他的解決方案,它確實工作,除了我用:
this.abortBroadcast();
裏面的broadcastReceiver。
public class NotifyServiceReceiver extends BroadcastReceiver{
static final String ACTION ="android.provider.Telephony.SMS_RECEIVED";
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
if(arg1.getAction().equalsIgnoreCase(ACTION))
{
Bundle extras = arg1.getExtras();
String strMessage = "private message";
if (extras != null)
{
Object[] smsextras = (Object[]) extras.get("pdus");
for (int i = 0; i < smsextras.length; i++)
{
SmsMessage smsmsg = SmsMessage.createFromPdu((byte[])smsextras[i]);
String strMsgBody = smsmsg.getMessageBody().toString();
String strMsgSrc = smsmsg.getOriginatingAddress();
//Toast.makeText(GasService.this,strMessage, Toast.LENGTH_SHORT).show();
if(strMsgSrc.equals("+919XXXXXXXXX"))
{
strMessage += "SMS from " + strMsgSrc + " : " + strMsgBody;
Toast.makeText(PrivatesmsService.this,strMessage, Toast.LENGTH_SHORT).show();
abortBroadcast();
}
}
}
}
}
}
您可以通過活動的優先級設置爲100或更高,然後在清單文件,這樣當過願意接收短信那麼你的應用程序將訪問它,並通過調用abortBroadcast(告訴系統),它會防止短信到達收件箱或已設置廣播接收器來接收短信
所以只要我沒有明確取消broadcastReveiver(或者將其標記爲handeled)任何其他應用程序,它會被髮送到隊列中下一個監聽器?這正是我需要的。聽起來很積極,在嘗試之前接受你的答案。 :) – Johan 2011-01-31 14:24:35
是的,有序的廣播可以取消。此鏈接解釋它:http://developer.android.com/reference/android/content/BroadcastReceiver.html – 2011-01-31 20:21:50