将ContentObserver与BlockedNumberContract一起使用

时间:2017-07-20 00:27:50

标签: android android-contentprovider contentobserver callblocking

我有一个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没有问题。谁能告诉我我做错了什么?为什么我阻止联系时我的应用程序没有得到通知?谢谢!

0 个答案:

没有答案