Android 谷歌社交网站打破短信秩序
我有一个应用程序,在收到短信后发送短信作为响应。()当在聊天室中启用SMS时,我的应用程序没有发送消息。我通过这样做修正了这个问题: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
<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);