我有一个VOIP通话和短信应用。我需要能够监视对本机阻止号码列表的更改,以便我可以在我的服务器上维护该列表。
在https://developer.android.com/reference/android/provider/BlockedNumberContract.html上关于BlockedNumberContract的文档之后,它说要实现ContentObserver来监视用户何时对列表进行更改。
我的应用程序要求用户将其设置为默认的Messaging应用程序,以便涵盖文档中的部分
只有系统,默认的SMS应用程序和默认的手机应用程序(请参阅getDefaultDialerPackage())和运营商应用程序(请参阅CarrierService)可以读取并写入被阻止的数字提供程序。
我创建了一个服务并在清单中注册了它。该服务正常启动,我能够在onStartCommand()
中看到我的日志public class MonitorBlockedContactsListService extends Service
{
private static CallBlockedListContentObserver myObserver;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@SuppressLint("NewApi")
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.i("starting MonitorBlockedContactsListService");
myObserver = new CallBlockedListContentObserver(new Handler());
getContentResolver().registerContentObserver
(BlockedNumberContract.BlockedNumbers.CONTENT_URI, true, myObserver);
return super.onStartCommand(intent, flags, startId);
}
@Override
public void onDestroy() {
getContentResolver().unregisterContentObserver(myObserver);
super.onDestroy();
}
}
以下是CallBlockedListContentObserver
的实现public class CallBlockedListContentObserver extends ContentObserver
{
public CallBlockedListContentObserver(Handler handler)
{
super(handler);
}
@Override
public void onChange(boolean selfChange) {
this.onChange(selfChange, null);
Log.i("CallBlockedListContentObserver", "first method");
}
@Override
public void onChange(boolean selfChange, Uri uri) {
Log.i("CallBlockedListContentObserver", "2nd method uri= "+uri);
}
@Override
public boolean deliverSelfNotifications() {
return true;
}
}
我的问题是,当我阻止来自电话簿的联系人时,2 onChange()方法中的日志永远不会被打印,这导致我认为ContentObserver没有跟踪更改。我目前正在测试Android 7设备,因此BlockedNumberContract作为新API没有问题。谁能告诉我我做错了什么?为什么我阻止联系时我的应用程序没有得到通知?谢谢!