除了@CommonsWare 指出的我的愚蠢错误之外,我还错过了
@Override
public void onCreate() {
super.onCreate();
ContentResolver contentResolver = this.getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms/out"),true, new SmsObserver(new Handler()));
}
另一个问题实际上是在这两行中
contentResolver.registerContentObserver(Uri.parse("content://sms/out"),true, new SmsObserver(new Handler()));
and
Uri uriSMSURI = Uri.parse("content://sms/out");
我在哪里改变了content://sms/out
to content://sms
然后继续检查类型以确保我收到的更改实际上是传出消息。我还必须确保检查多个调用,如下所示:
if (cr.getInt(cr.getColumnIndex("type")) == 2) {
if(id != cr.getInt(cr.getColumnIndex(cr.getColumnName(0)))) {
id = cr.getInt(cr.getColumnIndex(cr.getColumnName(0)));
String address = cr.getString(cr.getColumnIndex("address"));
Database.messageSent(SmsOutgoingObserver.this, address);
Log.d("OUTGOING", address);
} else {
Log.d("OUTGOING", "MESSAGE ALREADY LOGGED");
}
};
}
并简单定义private int id = 0;
作为全局变量