如何从Android中的特定联系人读取收件箱短信?

我正在尝试从内容提供商处读取短信。 我有以下代码

Uri uri = Uri.parse(SMS_URI_INBOX); String whereClause = "address=?"; String[] whereArgs = {address}; String[] projection = new String[] { "*" }; Cursor cur = getContentResolver().query(uri, projection, whereClause,whereArgs, "date desc"); 

一切都工作正常,除非各种格式的地址出现。 一种类型的地址可以用各种方式表示,如“+9198765443210”,“+ 91 987 65443210”,“+ 91(987)65443210”,“098765443210”等……这些类型的各种地址格式驻留在SMS内容提供商中同样。

方法1
最初我将所有地址转换为格式,其中特殊字符被%like替换
+9198765443210 – >%98765443210%
+91 987 65443210 – >%987%65443210%
然后使用String whereClause = "address LIKE ?";
但失败的原因可能是我们正在触发查询address LIKE %98765443210%但短信内容提供商的地址是+91 987 65443210。

在android中有类似normalized_address的东西我们可以用来从SMS内容提供商那里获取数据吗?

附加到@MikeM。 评论,下面的代码帮助我获得了使用我在SMS内容提供商中进行查询的threadId

 //Getting thread Id ContentResolver mContentResolver = context.getContentResolver(); Uri uriSmsURI1 = Uri.withAppendedPath(Telephony.MmsSms.CONTENT_FILTER_BYPHONE_URI, address); String[] projection1 = {this.threadId}; Cursor c1 = dbService.query(mContentResolver, uriSmsURI1, projection1, null, null, null); if(c1.getCount()==0) { log.error(methodName, "Got count: "+c1.getCount()+" While looking for ThreadID"); return null; } String threadId = null; while(c1.moveToNext()){ threadId = c1.getString(c1.getColumnIndexOrThrow(this.threadId)); } c1.close();