Android ContentObserver-确定短信状态

时间:2018-09-06 13:42:52

标签: android sms android-cursor android-query android-sms

我已经将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(不是与手机捆绑在一起的三星消息传递应用程序),所以也许我不确定这会影响结果。

最重要的是,问题是-如何检查邮件是否已成功发送? (假设我不是发送它的人,因为那样的话我会得到一个回调,其中包含该特定尝试的状态)

0 个答案:

没有答案