我已经将Telephony.Sms.CONTENT_URI
注册到Telephony.Sms.MESSAGE_TYPE_SENT
的URI中,以便在用户每次发送或接收新的SMS消息时得到通知。
对于成功发送和接收的邮件,它可以正常工作-但对于未能发送的邮件,我注意到了意外的行为:即使未成功发送,该邮件似乎也被报告为成功发送-我找不到任何有关失败的迹象。
在obeserver的onChange函数中,我尝试根据消息的类型确定消息状态,但是我得到的只是文件夹/类型Telephony.Sms.STATUS_NONE
(2)和状态@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"));
}
}
(-1 ),但这都不表示发送失败。那就是我使用的代码:
Telephony.Sms.CONTENT_URI
我还尝试在同一个函数中查询(使用Cursor cursor = contentResolver.query(Telephony.Sms.CONTENT_URI.buildUpon().appendPath("all").build(), null, null, null, null))
的URI)所有之前从未见过的SMS消息,然后像前面的代码示例一样提取相同的字段-但结果将保持不变。
我还尝试查询特定的URI,这些URI应该返回具有特定状态(如listed here)的所有邮件的列表,但我一直在获取一个空游标,不确定为什么:
{{1}}
(也尝试了其他附加路径,例如“失败”,“排队”,“发件箱”,“未送达”,所有这些都不起作用)。
顺便说一句,此代码仅在运行Android 7.0的三星Galaxy A7上进行了测试,而默认消息传递应用程序是Google的Android Messages(不是与手机捆绑在一起的三星消息传递应用程序),所以也许我不确定这会影响结果。
最重要的是,问题是-如何检查邮件是否已成功发送? (假设我不是发送它的人,因为那样的话我会得到一个回调,其中包含该特定尝试的状态)