我已将 a 注册ContentObserver
到 的 URI Telephony.Sms.CONTENT_URI
,以便在用户每次发送或接收新的 SMS 消息时得到通知。
对于成功发送和接收的消息,这工作正常 - 但对于发送失败的消息,我注意到一个意外行为:消息似乎被报告为好像它们已成功发送,即使它们不是 - 我不能找不到任何有关失败的迹象。
在 obeserver 的 onChange 函数中,我尝试根据消息类型确定消息状态,但我得到的只是Telephony.Sms.MESSAGE_TYPE_SENT
(2) 的文件夹/类型和Telephony.Sms.STATUS_NONE
(-1) 的状态,这两者都不表示发送有失败的。那是我使用的代码:
@Override
public void onChange(boolean selfChange, Uri uri) {
ContentResolver contentResolver = mContext.getContentResolver();
try (Cursor cursor = contentResolver.query(uri, null, null, null, null)) {
if (cursor == null || !cursor.moveToFirst()) {
// log goes here
return;
}
int folderId = cursor.getInt(cursor.getColumnIndex("type"));
int status = cursor.getInt(cursor.getColumnIndex("status"));
}
}
我还尝试在同一个函数中查询(使用 URI 的 URI Telephony.Sms.CONTENT_URI
)来查找我以前从未见过的所有 SMS 消息,然后像前面的代码示例一样提取相同的字段 - 但结果将保持不变。
我还尝试查询应该返回具有特定状态的所有消息列表的特定 URI(如此处所列),但我一直得到一个空光标,不知道为什么:
Cursor cursor = contentResolver.query(Telephony.Sms.CONTENT_URI.buildUpon().appendPath("all").build(), null, null, null, null))
(还尝试了其他附加路径,例如“失败”、“排队”、“发件箱”、“未交付”,所有这些都不起作用)。
顺便说一句,此代码仅在运行 Android 7.0 的三星 Galaxy A7 上进行了测试,当时默认消息传递应用程序是谷歌的Android 消息(不是与手机捆绑的三星消息传递应用程序),所以它可能会以某种方式影响结果,我不确定。
最重要的是,问题是 - 我如何检查消息是否已成功发送?(假设我不是发送它的人,因为那样我会收到一个回调,其中包含该特定尝试的状态)