Articles of android contentprovider

如何决定直接数据库访问和内容提供商?

我正在编写一个由业务逻辑和UI部分组成的应用程序。 BL和UI都存储和访问/修改了大量数据。 在大多数情况下,存储数据的更改应立即由UI反映。 我如何决定是否应该使用直接数据库访问? 内容提供商? 我已经对这个主题做了一些阅读( 1,2 ),我理解这两个选项之间的区别。 请分享您对问题其他方面的看法,例如性能,代码开发难度和可维护性等。

与内容提供商的小部件; 不可能使用ReadPermission?

所以我刚为我的应用程序实现了一个小部件。 它通过我的ContentProvider从数据库中获取数据。 我在清单中定义了自己的读/写权限,说明我使用它们(似乎没有什么区别),并在内容提供程序中要求它们: …… …… 我通过Service更新我的小部件(根据小部件教程): 而该Service依次执行此操作(不包括一堆代码): /** * This is the service that provides the factory to be bound to the collection * service. */ public class ListWidgetService extends RemoteViewsService { @Override public RemoteViewsFactory onGetViewFactory(Intent intent) { return new StackRemoteViewsFactory(this.getApplicationContext(), intent); } } /** * This is the factory that will provide data to […]

是否可以在不使用内容提供商的情况下访问另一个APK中的资源?

我认为除非使用内容提供商,否则无法访问其他APK中包含的资源。 但是,我偶然发现了一个名为Better Keyboard的应用程序。 它使用皮肤,所以我决定下载一个皮肤的例子。 皮肤的一个例子让我感到惊讶。 它几乎不包含代码,仅声明活动而不包含内容提供者。 尽管如此,它包含资源,如果安装了带皮肤的APK,它们显然可以通过Better Keyboard应用程序进行访问。 那怎么办?

指定ContentProvider查询的限制/偏移量

我正在尝试让我的ContentResolver运行此查询: select * from myTable limit 1 offset 2 ContentResolver中唯一的查询方法是: resolver.query(uri, projection, selection, selectionArgs, sortOrder); 我试过了: final Cursor c = resolver.query( MyTable.CONTENT_URI, MyTable.PROJECTION, ” ? ?”, new String[] {“1”, “2”}, null); 这只是抛出一个IllegaLArgumentException。 实现这一目标的正确方法是什么?

从命令行(adb shell)查询Android内容提供程序

有一个命令可以根据意图启动一个活动: am start 。 还发送广播: am broadcast 。 我想可能应该有一个shell命令来查询内容提供者,可能是这样的: query content://com.myapp.authority/path –where ‘column=?’ –arg 1 –order ‘column desc’ 或类似的。 有吗?

Android的UriMatcher存在问题

在对我之前的一个问题的回答中,有人表示Android类UriMatcher中存在一些固有的缺陷(缺乏更好的词)。 任何人都可以通过UriMatcher查明已知问题吗? 我正在设计一个依赖于UriMatcher的内容提供程序来正确匹配我的Uris(而不是我猜错了)。 是否有已知问题的解决方法? 或者是否有更好的匹配Uris的策略? 例: 这是我的UriMatcher的代码设置 private static final int MEMBER_COLLECTION_URI = 1; private static final int MEMBER_SINGLE_URI = 2; private static final int SUBMATERIAL_COLLECTION_URI = 3; private static final int SUBMATERIAL_SINGLE_URI = 4; private static final int JOBNAME_COLLECTION_URI = 5; private static final int JOBNAME_SINGLE_URI = 6; private static final int ALL_MEMBERS_URI = […]

ContentProvider中的光标包装/解包

我正在创建ContentProvider,它是另一个ContentProvider的代理(用于安全问题并允许访问完整应用程序的部分function)。 public class GFContactsProvider extends ContactsProvider implements DatabaseConstants { private Context mContext; private ContentResolver mContentResolver; @Override public boolean onCreate() { mContext = getContext(); mContentResolver = mContext.getContentResolver(); } @Override public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) { Cursor result = mContentResolver.query(ContactsContract.getContactsURI(Long.parseLong(address.get(1))), null, null, null, ContactsContract.ContactColumns.SHOW_NAME); return result; } } 从我的CP调用内部CP后,我发现意外的exception: java.lang.UnsupportedOperationException: […]

在冰淇淋三明治中的ContentResolver中分组

我正在对Android Contacts ContentProvider进行查询。 我需要一个Group By子句。 在Gingerbread和Honeycomb中,我做了类似的事情来同时搜索电话号码和电子邮件: (实际的WHERE子句要复杂得多,因为它包含types检查。这是一种简化,但它会产生相同的结果) String request = Phone.NUMBER + ” LIKE ? OR ” + Email.DATA + ” LIKE ?”; String[] params = new String[“%test%”, “%test%”]; Cursor cursor = getContentResolver().query( Data.CONTENT_URI, new String[] { Data._ID, Data.RAW_CONTACT_ID }, request + “) GROUP BY (” + Data.RAW_CONTACT_ID, params, “lower(” + Data.DISPLAY_NAME + “) ASC”); […]

哪个线程运行ContentProvider?

如果我从一个Activity调用ContentProvider,哪个线程运行在ContentProvider中? 例如,如果Activity被杀死并且ContentProvider中正在执行查询,会发生什么? 假设您的网络查询速度很慢f.ex.

使用@string for android:在ContentProvider中使用权限

我的清单中有一个ContentProvider,当我使用硬编码字符串完全定义它时,它可以工作。 例如 工作完美,但ContentProviders在一个被多个项目使用的库中,我不想要权限冲突,所以我尝试执行以下操作。 这样我就可以在单个strings.xml文件中定义所有权限,并且应用程序之间没有冲突,因为我应该能够使用每个应用程序资源覆盖系统来更改它们。 但是,当我尝试使用@string进行构建时,它似乎给了我一个格式错误的清单错误,并说“提供商不会INCUDE(是的,它说INCUDE)当局致敬” 我是否可以不使用资源字符串为当局致敬,每次我需要在两个位置维护常量时我感到恶心。 我们的QA部门很难抓住权威冲突,我不希望事情变得不同步或者可能引起混淆。 任何人都有任何想法为什么我的代码不工作?