在我的应用程序中接收文本,但不希望它显示在其他SMS应用程序中

时间:2012-03-19 18:58:39

标签: android sms

我正在尝试为我的本地总线系统制作应用程序。他们有一项服务,您可以在其中发送一个4位数的停止标识,并查看下一次公交车何时出现。

这些ID很难记住,所以我正在创建一个具有停止逻辑名称的应用程序,当您点击它们时,它会为您发送一个包含正确ID的SMS。

然后他们会向您发送短信回复。我想要回复我的应用程序,并在那里处理一些解析和漂亮的GUI的东西。但是,系统SMS应用程序也获取文本。我宁愿没有这种双重回应。

是否可以将响应定向到我的应用而不是其他应用?

2 个答案:

答案 0 :(得分:1)

是的,这是可能的。

首先,在你的清单中,你需要将接收者的优先级设置为一个非常高的值:

<intent-filter android:priority="999">
  <action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter> 

这可确保您的应用程序首先收到SMS。然后,在您收到并处理SMS的代码中,输入以下代码:

this.abortBroadcast();

这会阻止将SMS发送到其他接收器。

答案 1 :(得分:1)

我认为这是可能的。 在android中有两种广播,

  1. 普通广播
  2. 有序广播
  3. 参考:BroadcastReceiver

    普通广播不能阻止,但可以订购。


    SMSReceiver是一种有序的广播。 在SMSDispatcher.java

    void dispatch(Intent intent, String permission) {
        // Hold a wake lock for WAKE_LOCK_TIMEOUT seconds, enough to give any
        // receivers time to take their own wake locks.
        mWakeLock.acquire(WAKE_LOCK_TIMEOUT);
        mContext.sendOrderedBroadcast(intent, permission, mResultReceiver,
                this, Activity.RESULT_OK, null, null);
    }
    

    因此我们可以注册广播接收器并将android:priority设置为一个大数字 和接收者abortBroadcast()。我想它可能有用。