【问题标题】:ContentObserver not working in androidContentObserver 在 android 中不起作用
【发布时间】:2015-05-25 17:48:40
【问题描述】:

您好,我正在尝试使用以下代码。内容解析器无法使用此代码。任何人都可以给出一个想法

getContentResolver().registerContentObserver(MyContentProvider.CONTENT_URI,true, new ContentObserver(new Handler()){

    @Override public void onChange(    boolean selfChange){

        showDialog();
    }

    @Override
    public void onChange(boolean selfChange, Uri uri) {

        // Handle change.
        showDialog();
    }
});

提前致谢

【问题讨论】:

  • 请解释“不工作”是什么意思。另外,MyContentProvider 中是否有适当的“通知”电话?
  • 这里没有调用onchange方法。抱歉,我不知道 contentprovider 中的通知调用。我们真的需要它吗?

标签: android contentobserver


【解决方案1】:

ContentObserver 仅适用于在提供程序的内容更改时调用 one of the notifyChange() methods on a ContentResolverContentProvider。如果ContentProvider 没有调用notifyChange()ContentObserver 将不会收到更改通知。

【讨论】:

  • 我可以使用 ContentObserver 作为 FileObserver 的替代品,因为 FileObserver 在 Android 11 及更高版本中无法运行。任何小例子将不胜感激。我想监听添加到选定目录或子目录中的任何文件。
  • 好的,不用担心,谢谢您的回复。一旦我尝试,会及时通知您。
【解决方案2】:

问题

我遇到的问题是 ContentObserver.onChange() 方法从未被调用,因为 ContentObserverHandlerLooper 初始化不正确。我在调用Looper.prepare() 后忘记调用Looper.loop()...这导致Looper 不消费事件并调用ContentObserver.onChange()

解决方案

解决方案是为ContentObserver正确创建和初始化HandlerLooper

// creates and starts a new thread set up as a looper
HandlerThread thread = new HandlerThread("MyHandlerThread");
thread.start();

// creates the handler using the passed looper
Handler handler = new Handler(thread.getLooper());

// creates the content observer which handles onChange on a worker thread
ContentObserver observer = new MyContentObserver(handler);

useful SO post about controlling which thread ContentObserver.onChange() is executed on.

【讨论】:

  • 谢谢,被困在完全相同的问题上!
猜你喜欢
  • 2016-07-14
  • 1970-01-01
  • 2011-08-03
  • 2012-07-14
  • 2018-06-18
  • 1970-01-01
  • 2021-08-31
  • 2016-02-20
  • 2011-09-19
相关资源
最近更新 更多