接收短信是否有可能为我的应用程序接收来自特定电话号码的短信,不让它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