我知道这个问题已经很老了,可能是重复的,但我有一个基于它的特定查询,我仍在努力寻找解决方案。
据我所知,一旦数据发生变化,就会触发ContentObserver
on URI 。content://sms
我努力了,
https://katharnavas.wordpress.com/2012/01/18/listening-for-outgoing-sms-or-send-sms-in-android/
Android:使用 ContentObserver 或接收器不工作来捕捉传出的 SMS
还有很多...
据我了解,这只能通过内容提供者来实现,并且没有广播来处理这个问题。也content://sms/sent
不起作用
contentResolver.registerContentObserver(Uri.parse("content://sms/sent"), true, observer);
我正在接收onChange
每个消息传递数据,无论其 SMS 发送、接收还是删除。因此,根据我使用https://developer.android.com/reference/android/provider/Telephony.TextBasedSmsColumns.html#MESSAGE_TYPE_SENT作为比较方法找到的 android 和其他 stackoverflow 链接的文档。
所以我的支票是这样的,
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Uri uriSMSURI = Uri.parse("content://sms");
Cursor cur = getContentResolver().query(uriSMSURI, null, null, null, null);
cur.moveToFirst();
String id = cur.getString(cur.getColumnIndex("_id"));
String protocol = cur.getString(cur.getColumnIndex("protocol"));
Log.d(TAG, "protocol = " + protocol);
int type = cur.getInt(cur.getColumnIndex("type"));
Log.d(TAG, "onChange: type = " + type);
// I have even tried with protocol == null check.
if (type == 2 && smsChecker(id)) {
Log.d(TAG, "Sent sms");
}
cur.close();
}
private boolean smsChecker(String smsId) {
boolean flagSMS = true;
if (smsId.equals(lastSmsId)) {
flagSMS = false;
}
else {
lastSmsId = smsId;
}
return flagSMS;
}
所以我的问题是,如果我删除任何消息或触发传出消息,我会在我的 HTC 手机上收到类型 2 - L OS(有时对于传入消息,我也会看到 type==2)。
我如何分离这个 onChange 请求,因为我特别在寻找 SMS SENT 更改。