我已经定义了以下服务,并观察已发送的消息。问题是在发送消息时,没有调用onChange()方法,有人请告诉我为什么?
谢谢
public class countService extends Service {
ContentResolver contentResolver;
MyContentObserver Observer;
Uri sms_content = Uri.parse("content://sms/sent");
public Cursor cursor;
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
contentResolver = getBaseContext().getContentResolver();
Observer = new MyContentObserver();
contentResolver.registerContentObserver(sms_content, true, Observer);
super.onCreate();
}
private class MyContentObserver extends ContentObserver {
public MyContentObserver() {
super(null);
}
@Override
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.d("BOOOOOOOOOOOOOOOOOO", "c");
Cursor cursor = contentResolver.query(sms_content, null, null,
null, null);
cursor.moveToFirst();
String type = cursor.getString(cursor.getColumnIndex("type"));
Log.d("THEMESSAGE", type);
}
}
}
要为发送/接收的短信注册ContentObserver
,您需要注册 ContentObserver for "content://sms"
而不是"content://sms/sent"
,并将用于获取传入或传出短信的逻辑放在onChange
ContentObserver
方法中:
将服务onCreate()
更改为:
@Override
public void onCreate() {
// TODO Auto-generated method stub
contentResolver = getBaseContext().getContentResolver();
Observer = new MyContentObserver();
contentResolver.registerContentObserver(
Uri.parse("content://sms"),true, Observer);
super.onCreate();
}
在MyContentObserver ContentObserver
中,您可以检查发送/接收的SMS,并确保已在Manifast中添加SMS READ权限:
<uses-permission android:name="android.permission.READ_SMS"/>