Articles of android contentresolver

Android获取所有联系人列表(姓名,电子邮件,电话)需要超过一分钟的约700个联系人

有没有办法缩短这个时间? 我正在使用光标运行并获取姓名,电话号码和电子邮件 如果我从查询循环中删除电话号码查询,它将在3秒后结束 任何想法如何改进该查询? 也许我在查询中做错了什么? (显然我正在做异步但仍然……很长一段时间用户不能等待) 希望有人可以分享他对此的看法 这是我的代码 ContentResolver cr = getContentResolver(); Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); if (cur.getCount() > 0) { while (cur.moveToNext()) { AddressBookEntity adr = new AddressBookEntity(); String id = cur.getString(cur .getColumnIndex(ContactsContract.Contacts._ID)); String name = cur .getString(cur .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); adr.fullName = name; Cursor emailCur = cr .query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + […]

SyncAdapter运行animation – 如何知道SyncAdapter是否正在主动同步

我想在ActionBar中显示ProgressBar,而我的SyncAdapter正在主动地将内容与Web同步。 我已尝试将SyncStatusObserver与ContentProvider.addStatusChangeListener一起使用。 但是,我无法检查SyncAdapter是否正在运行。 我只能检查: SyncAdapter正在使用ContentResolver.isSyncPending挂起 SyncAdapter正在等待或正在使用ContentResolver.isSyncActive正常工作 可以组合这些标志: !isSyncPending && isSyncActive以便可以检查SyncAdapter是否正在正常工作,并且没有任何待处理的工作。 但是,在某些情况下,SyncAdapter正在正常工作,并有第二个等待它的待处理请求。 看起来很简单,但我无法find解决这个问题的方法。 在SyncAdapter未运行时显示ProgressBar会给用户留下同步非常慢的印象。 让它不显示ProgressBar会让用户认为没有发生任何事情。 代码中的上述解决方案如下所示。 我们在activity.onResume中注册观察者: int mask = ContentResolver.SYNC_OBSERVER_TYPE_PENDING | ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE; syncHandle = ContentResolver.addStatusChangeListener(mask, syncObserver); syncObserver在这里定义为: syncObserver = new SyncStatusObserver() { @Override public void onStatusChanged(int which) { Account account = getSomeAccount(); boolean syncActive = ContentResolver.isSyncActive(account, CONTENT_AUTHORITY); boolean syncPending = ContentResolver.isSyncPending(account, CONTENT_AUTHORITY); boolean isSynchronizing = […]

列出Android中的所有相机图像

你如何获得Android设备的所有相机图像列表? 是通过MediaStore吗? 怎么样?

如何从URI加载Picasa图片?

我正在使用ACTION_PICK意图从图库中选择图像。 一些专辑如“post” , “个人资料照片”等都标有Picasa图标。 对于来自此类相册的图片,我得到一个类似于此的URI: content://com.google.android.gallery3d.provider/picasa/item/5769844615871490082 我可以使用ContentResolver和BitmapFactory从此URI加载图像,没有问题: final InputStream ist = context.getContentResolver().openInputStream(intent.getData()); final Bitmap bitmap = BitmapFactory.decodeStream(ist); 但是在重新启动应用程序后,我无法使用存储的URI加载图像。 我在调用decodeStream()时得到这个: 03-11 12:34:56.502: A/libc(1172): Fatal signal 11 (SIGSEGV) at 0x00000408 (code=1), thread 1462 03-11 12:34:56.502: W/ActivityManager(478): Permission Denial: opening provider com.android.gallery3d.provider.GalleryProvider from ProcessRecord{41cdd220 1172:com.mycompany.myapp/u0a10085} (pid=1172, uid=10085) requires com.google.android.gallery3d.permission.GALLERY_PROVIDER or com.google.android.gallery3d.permission.GALLERY_PROVIDER 我试着补充一下 清单文件,但它没有帮助。 我认为我的问题类似于这个 ,但没有解决方案,只有一个解决方法。 是否可以请求访问存储的URI的权限?

Android从收件箱中获取短信,优化了读取所有邮件并对其进行分组的方式

您好我正在实施一个短信应用程序,现在能够检索所有消息与他们各自的联系信息,如显示名称,照片uri ..并在自定义列表中显示它们,在项目点击进入相应的讨论。 在这里我的问题是同步所有这些消息的时间, 我需要优化这个时间。 每次我在讨论视图中发送新消息并返回到最近的聊天时我只需要更新特定项目,而不是整个列表。 这是我的代码: ReadSMS.java: public class ReadSMS { ArrayList<HashMap<Contact, ArrayList>> recentChats; Application _context; public ReadSMS(Application context) { this._context = context; this.recentChats = ((ChatApplication) _context).getChats(); } public ArrayList<HashMap<Contact, ArrayList>> getSMS() { // Init ArrayList smsMsgs = new ArrayList(); TreeSet threadIds = new TreeSet(); Uri mSmsinboxQueryUri = Uri.parse(“content://sms”); Cursor cursor = _context.getContentResolver().query( mSmsinboxQueryUri, new […]

Android创建播放列表

有人知道如何在代码中向Android添加播放列表吗? 我有点必须将它插入到内容解析器中,但是我必须将歌曲ID放入或者是否必须将所有歌曲的数据放入? 我一直在寻找示例代码,但还没有find。 编辑:在这里find答案是我如何做到的: public static void addToPlaylist(ContentResolver resolver, int audioId) { String[] cols = new String[] { “count(*)” }; Uri uri = MediaStore.Audio.Playlists.Members.getContentUri(“external”, YOUR_PLAYLIST_ID); Cursor cur = resolver.query(uri, cols, null, null, null); cur.moveToFirst(); final int base = cur.getInt(0); cur.close(); ContentValues values = new ContentValues(); values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, Integer.valueOf(base + audioId)); values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, audioId); resolver.insert(uri, values); } public […]

SyncAdapter始终处于挂起状态

我正在开发一个Android应用程序,它依赖于SyncAdapter来刷新服务器上的内容。 我基本上遵循了这些说明: https : //developer.android.com/training/sync-adapters/creating-sync-adapter.html 直到最近,这仍然很好。 我知道这可能听起来很愚蠢,但老实说我不知道​​我是怎么搞砸的:( 设置 我有一个ContentProvider ,因此我想要同步的所有项目都有一个SyncAdapter和一个帐户。 我使用整数标志来确定哪个项目必须同步: public static final int EVENTS = 0x1; public static final int NEWS = 0x2; public static final int SUBSTITUTIONS = 0x4; public static final int TEACHERS = 0x8; public static final int ALL = 0xF; 所以在我的onPerformSync我有类似的东西: ArrayList batchList = new ArrayList(); int which = […]

如何在android中调用getContentResolver?

我正在编写一个库类来封装我的第一个Android应用程序中的一些逻辑。 我要封装的function之一是查询地址簿的函数。 因此,它需要一个ContentResolver 。 我试图弄清楚如何保持库函数的黑盒子…也就是说,避免让每个Activity在其自己的上下文中传递以获取ContentResolver 。 问题是我不能为我的生活弄清楚如何从我的库函数中获取ContentResolver 。 我找不到包含getContentResolver的导入。 谷歌说使用getContext来获取一个调用getContentResolver的Context ,但我找不到包含getContext的导入。 接下来发帖说使用getSystemService来获取一个调用getContext的对象。 但是 – 我找不到任何包含getSystemService导入! 所以我很困惑,我怎么能在封装的库函数中获得ContentResolver,或者我几乎停留在每个调用Activity传递给它自己的上下文? 我的代码基本上是这样的: public final class MyLibrary { private MyLibrary() { } // take MyGroupItem as a class representing a projection // containing information from the address book groups public static ArrayList getGroups() { // do work here that would access […]

在自定义内容提供程序中调用delete方法

我正在学习Android,而且我遇到了一个涉及调用自定义内容提供商的问题。 我一直在教学书中使用一个例子,虽然它描述了如何创建自定义提供者,但没有明确的例子如何调用其中的特定方法。 我特别研究如何从自定义内容提供程序中删除单个记录。 以下是自定义内容提供程序( EarthquakeProvider.java )的代码: @Override public int delete(Uri uri, String where, String[] whereArgs) { int count; switch (uriMatcher.match(uri)) { case QUAKES: count = earthquakeDB.delete(EARTHQUAKE_TABLE, where, whereArgs); break; case QUAKE_ID: String segment = uri.getPathSegments().get(1); count = earthquakeDB.delete(EARTHQUAKE_TABLE, KEY_ID + “=” + segment + (!TextUtils.isEmpty(where) ? ” AND (” + where + ‘)’ : “”), […]

如何使用ContentProvider的insert()方法通过CursorLoader将值正确插入SQLite数据库?

我正在阅读文档,但我仍然不太确定。 它说要使用getContentResolver() ,但那时确实没有使用CursorLoader。 那么有没有办法通过CursorLoader来做到这一点? 我知道如何使用query() 。 步骤非常相似吗? 即使只是一个可以解释这一点的链接也会有所帮助。 请注意,请不要将我链接到Google文档,因为他们没有使用CursorLoader从ContentProvider中使用insert()方法的示例。 提前致谢!! 编辑:我应该提到我与此混淆的原因是因为调用新的CursorLoader自动调用ContentProviders query()方法。 但是我如何才能为插入做同样的事情呢?