我花了 5 天时间尝试不同的东西,并在谷歌上搜索了很多,但都没有运气
我有一个广播接收器来监控和备份传入的彩信和短信。短信 - 传出和传入很容易没问题。然而彩信...
我有一个接收彩信的广播接收器,那里没问题。
然而,对于传出的彩信,我使用了一个指向 content://mms 的内容观察器
这是从服务类注册内容观察者的部分
mo = new MMSObserver(new Handler(),getApplicationContext());
try{
getContentResolver().unregisterContentObserver(mo);
}
finally{
getContentResolver().registerContentObserver(Uri.parse("content://mms"), true, mo);
}
这是上述内容观察器中的 onchange 部分
public void onChange(boolean bSelfChange)
{
super.onChange(bSelfChange);
Log.i(TAG,"MMSObserver onChange");
ContentResolver contentResolver = context.getContentResolver();
Uri uri = Uri.parse("content://mms");
Cursor cur = contentResolver.quert("content://mms",null,null,null,null)
if(cur.moveToNext()){
String id = cur.getString(cur.getColumnIndex("_id"));
String date = cur.getString (cur.getColumnIndex ("date"));
String address = getAddress(id);
}
}
private static String getAddress(String id){
String selectionAdd = new String("msg_id=" + id);
String uriStr = MessageFormat.format("content://mms/{0}/addr", id);
Uri uriAddress = Uri.parse(uriStr);
Cursor cAdd = context.getContentResolver().query(uriAddress, null,
selectionAdd, null, null);
String name = null;
if (cAdd.moveToFirst()) {
do {
String number = cAdd.getString(cAdd.getColumnIndex("address"));
if (number != null) {
try {
Long.parseLong(number.replace("-", ""));
name = number;
} catch (NumberFormatException nfe) {
if (name == null) {
name = number;
}
}
}
} while (cAdd.moveToNext());
}
if (cAdd != null) {
cAdd.close();
}
return name;
}
问题是地址列总是为传出的 mms 返回“插入地址令牌”。有没有什么办法可以得到 mms 的号码?
我还注意到,当消息处于草稿形式而不是发送或待处理消息时,会触发内容观察器。因为依赖这些uris通常是一个坏主意,因为它们不是sdk的一部分,所以我改用了另一种方法。对所有短信和彩信进行编目并存储它们的 _id 列,然后将它们与备份同步。但是我的问题仍然存在。
彩信地址栏始终为“插入地址令牌”
有什么建议么?