Android 谷歌社交网站打破短信秩序

Android 谷歌社交网站打破短信秩序,android,android-intent,sms,Android,Android Intent,Sms,我有一个应用程序,在收到短信后发送短信作为响应。()当在聊天室中启用SMS时,我的应用程序没有发送消息。我通过这样做修正了这个问题: <intent-filter android:priority="500"> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> 但它应该是: Received Message - triggers resp

我有一个应用程序,在收到短信后发送短信作为响应。()当在聊天室中启用SMS时,我的应用程序没有发送消息。我通过这样做修正了这个问题:

<intent-filter android:priority="500">
    <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
</intent-filter>
但它应该是:

Received Message - triggers response
Response Message
是否有一种方法可以让我在写入响应消息之前等待写入收到的消息?当短信被禁用时,它可以正常工作。但是,由于Hangouts现在正在编写该消息,而不是默认的短信接收器,它会把事情搞得一团糟

编辑:感谢Keith的回复,这是对我有用的代码:

context.getContentResolver().registerContentObserver(
Uri.parse("content://sms"), 
true, 
smsObserver);
这门课:

private class SMSObserver extends ContentObserver
{
    public SMSObserver()
    {
        super(null);
    }

    @Override
    public boolean deliverSelfNotifications() {
        return true;
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        if(!selfChange)
            //sendResponse
        context.getContentResolver().unregisterContentObserver(this);
    }

    @Override
    public void onChange(boolean selfChange, Uri uri) {
        super.onChange(selfChange, uri);
        if(!selfChange)
            //sendResponse
        context.getContentResolver().unregisterContentObserver(this);
    }
}
我不确定是否需要自我更改部分,但它可以工作,所以我不会更改它。

尝试在SMS数据库上进行更改,以便在Hangouts写入SMS内容提供商时进行侦听。此方法应与4.4/Hangouts以及早期版本兼容;你只需等到有东西写出来,就可以写下你发送的消息

在Android 4.3 Galaxy Nexus上测试了两个不同的版本:

context.getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, myContentObserver);

但由于某些原因,我无法将非光标版本与sms/收件箱一起使用。基于光标的版本的缺点是,它似乎需要保持打开状态,因此您必须确保稍后关闭它


此外,当读取状态更改时,两个版本都不会被调用。

第一个版本正常工作。在看到您对ContentObserver的最初反应后,我之前尝试过类似的解决方案,而这实际上是我接下来要尝试的。谢谢你的帮助!如果它对您不起作用,请注意我的清单中有
priority=“500”
。这是必须有一个更高的优先级比闲逛。否则消息就永远不会进入你的应用程序。是的,我把优先级设置得很高。不确定是否有用,但是
context.getContentResolver().registerContentObserver(Uri.parse("content://sms"), true, myContentObserver);
cursor = context.getContentResolver().query(Uri.parse("content://sms/inbox"),
            new String[] { SMS_ID, SMS_ADDRESS, SMS_READ },
            "read = 0",
            null,
            null);
cursor.registerContentObserver(myContentObserver);