我正在尝试读取来自内容提供商的短信。我有以下代码
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 内容提供商中以及。
方法一:
最初我将所有地址转换为特殊字符被 % 替换的格式,例如
+9198765443210 --> %98765443210%
+91 987 65443210 --> %987%65443210%
然后使用String whereClause = "address LIKE ?";
但失败了因为我们可能会触发查询address LIKE %98765443210%
但短信内容提供商的地址是+91 987 65443210。
android 中是否有类似 normalized_address 的东西,我们可以使用它从 SMS 内容提供商获取数据?
附加到@MikeM。评论,下面的代码帮助我获取 threadId,我使用它在 SMS 内容提供商中进行查询
//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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)