问题标签 [contentobserver]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
396 浏览

android - 使用 ContentObserver 监控变量变化

ContentObserver是否可以通过构造 Uri 并在注册时将其作为参数传递来使用 a来监视变量更改(例如字符串)?如果是,您能否提供一个功能示例?

0 投票
1 回答
362 浏览

android - 查找 ContentResolver.notifyChange 的调用者

我有一个更新包含服务配置数据的表的活动。我正在使用 SimpleCursorLoader 和 SupportLoaderManager 来更新该 Activity 中的列表视图。我在活动的 onDestroy 中销毁了加载程序。这可能不相关,因为即使没有访问此活动,我看到的问题也会发生。

我也有一项服务,它将 URI 上的 ContentObserver 注册到在上面的 Activity 中修改的表。它读取其配置,设置自己并在服务的 onCreate 中的该表上注册一个 ContentObserver。在服务的 onDestroy 中,该侦听器未注册。

这只是我系统中的几个数据库/表中的一个。我看到的是,当我对完全不同的表进行更新时,会触发此配置 URI 上的 ContentObserver。Authorities 完全不同,它们与不同的 SqlLite 数据库交互,它们甚至在应用程序的不同进程中运行。我删除了所有我能找到的会触发 ContentObservers 的“notifyChange”调用,但它们仍在触发。

我的问题是,有没有办法找出谁在调用导致 ContentObserver 触发的 notifyChange?我的应用程序之外的系统是否有任何理由通知观察者一个 URI?我正在尝试追踪它,但不知道通知来自何处,我正在撞墙。

0 投票
1 回答
404 浏览

uri - 带有 URI 的 ContentObserver 不适用于 API 级别 16 中的联系人

我正在尝试以下代码:

当我运行此代码并编辑联系人时,我看到

uri 是 content://com.android.contacts

为什么我没有在 URI 中获得个人联系人的 ID?如果我尝试 SMS 观察者,我会得到包含 ID 的正确 URI。我在这里缺少什么吗?这是在三星 S3 手机上。

0 投票
0 回答
292 浏览

android-contentprovider - 如何在没有 CursorAdapter 的情况下获取光标更新通知?

我正在编写一个Fragment使用加载器来获取Cursor有关地图上各种事物位置的包含数据的代码。我继承了代码,按与设备或搜索位置的距离对这些位置进行排序;距离度量并不是在 SQL 中特别容易实现的东西,所以CursorAdapter我不是使用(和其他地方一样)从 中加载数据Cursor,然后再对其进行排序。

我只有一个问题:当 Web 服务返回一组新的位置时(例如,在第一次加载时),列表没有更新。我在ContentObserver上注册了一个,当我打电话给它时Cursor击中;只是我从原始负载中存储的计数仍然为零。notifyChange(...)ContentProviderCursor

回调和ContentObserver看起来像这样:

我只知道CursorAdapter更新时会Cursor更新,而且我会在我期望的时候收到更新事件,这让我认为流程的这个阶段至少是有效的。我如何才能mCursor给我新数据,或者获得Cursor代表新数据的新数据?

0 投票
3 回答
10038 浏览

android - 从 contentProvider.update() 更改 uri 的 notifyChange

我已经实施update()ContentProvider通知观察者使用getContext().getContentResolver().notifyChange(uri, null);

我明显的需要是,每当只影响一行时,我想用行特定的 uri 通知,但找不到这样做的方法。像这样的附加查询"select id where selectionArgs"可以做到这一点,但这将是一种愚蠢的方式。

onchange(boolean, uri)获取完整的uri而不是特定的行,很容易理解这是因为ContentProvider.update()发送相同。

MyContentProvider 的 update() 方法

我会更新一些表格

坦率地说,代码与问题几乎没有关系,只是想给你一些上下文

0 投票
1 回答
1147 浏览

android - 在启动时为 appwidgets 注册内容观察器

ContentObserver当用户将我的 appwidget 添加到主屏幕时,我正在注册。预期的行为是对 my 中基础数据的更改ContentProvider将触发我的 appwidget 进行更新。问题是如果用户然后重新启动设备,我就不再ContentObserver注册了。

Android 的 AppWidget 框架似乎没有提供任何挂钩来在设备启动后进行任何类型的设置,因此我无法ContentObserver在数据上注册另一个。我能想到的唯一解决方案是创建一个在清单中注册的 BroadcastReceiver,它接收 BOOT_COMPLETED 操作。我希望不必这样做。

是否有任何方法可以在启动后注册 ContentObserver(或进行与 AppWidgets 相关的任何其他设置),以便现有的 appwidgets 在设备重新启动后继续正常运行?(如果可能的话,在某个地方有这样的样本吗?)

编辑

它在启动后出现,我的 AppWidgetProvider 正在被调用,并且 onEnabled 和 onUpdate 回调都发生了。它启动我的 AppWidgetService 并创建一个 RemoteViewsFactory ——此时我应该注册一个 ContentObserver。

但是,无论出于何种原因,当我的 ContentProvider 中的数据发生更改时,ContentObserver 都不会触发。我不知道为什么。

0 投票
1 回答
386 浏览

android - 文档的 ContentObserver

我需要能够跟踪添加/删除文档到 android 文件系统。我所说的Documents是指 word、excel、powerpoint 和 pdf 等文件。我知道ContentProvidersContentObservers。就's 而言,我看到我可以为媒体文件类型ContentObserver设置一个,即AudioVideoPhotos。但是,我没有看到可以告诉我有关文档类型的信息。ContentObserver

一种可能性是我ContentObserver为所有文件(包括媒体)安装了一个,但我担心它会对性能产生什么影响。我问是因为我看到人们已经在抱怨 android 扫描整个文件系统以查找媒体文件的更改。我已经意识到人们用来让 android 从更改中跳过某些文件夹的.nomediaContentObserver解决方法。

我正在寻找两个答案:

  1. 有没有更有效的方法来实现我想要的,而无需查看所有文件的更改?类似于 Documents 的东西ContentObserver

  2. 另一件事是,当我在 Android 设备上打开“我的文件”时,我会在其他媒体类型中看到顶层的Documents条目。有谁知道这是如何实现的?

0 投票
4 回答
7274 浏览

java - 为什么以及何时在 android 中取消注册内容观察者

我正在开发一个 android 应用程序,并且第一次与内容观察者合作。所以我阅读了很多教程并了解了为什么提供它以及如何使用它的概念。

现在我在一个博客上读到了这些行

不要忘记注销内容观察者

所以,我无法理解如果我想注册一个,ContentObserver那么我必须取消注册的情况可能是什么。

如果观察者的目的得到满足,那么就可以了,我们可以注销它。但是我必须观察直到用户卸载应用程序,然后我为什么要取消注册观察者。

这是那个博客的网址

http://www.grokkingandroid.com/use-contentobserver-to-listen-to-changes/

0 投票
2 回答
9688 浏览

android - 在 Android 内容观察器中观察 Audio.Media.EXTERNAL_CONTENT_URI 的变化

我正在开发一个 Android 应用程序,我必须在其中检测 Android SD 卡中音频文件的更改,其中包含文件名、文件路径和对其执行的操作。例如,如果我在我的 SD 卡中添加一个文件,那么我想知道

  1. 添加的文件名
  2. 文件路径
  3. 操作——添加

以前我尝试过文件观察器但为此我必须将它应用于每个目录。所以我搜索了一些其他解决方案并获得了有关Audio.Media.EXTERNAL_CONTENT_URI的信息。然后我创建了一个像这样的内容观察者

UriObserver.java -- 内容观察者

这是它的注册代码

它让我知道与音频文件相关的 sdcard 发生了一些变化。但它没有提供有关添加、编辑或删除哪个文件的任何信息。

然后我搜索了解决方案并得到了这篇文章

Android:通过 MTP 连接时如何检测 MediaStore 的变化

在这篇文章中, Bhiefer给出了一些代码作为答案,我认为它可以工作,所以我试图实现它,但我无法做到。

我能为此做些什么?

更新

我可以查询 Audio.Media.EXTERNAL_CONTENT_URI 的最新更改吗?这段代码:

没有给出最新的变化。还有其他方法可以获取最新更改吗?

0 投票
1 回答
2153 浏览

android - 如何创建服务检测新联系人添加

我找到了很多代码来检测 noveaux 添加联系人

例如

但是此代码与活动相关联,

我认为应用程序在打开时可以工作,但我希望服务使用 ContentObserver

是什么取代了这段代码的执行

放入服务方法“OnStart”