Articles of android contentresolver

Sporadic IllegalArgumentException:未知的URL内容://

很少得到: Fatal Exception: java.lang.IllegalArgumentException: Unknown URL content://com.example.provider/info at android.content.ContentResolver.insert(ContentResolver.java:1252) Fatal Exception: java.lang.IllegalArgumentException: Unknown authority com.example.provider at android.content.ContentResolver.applyBatch(ContentResolver.java:1247) 很少强调。 一般工作正常没有问题,所以当局设置得很好,但这种情况每隔一段时间就会出现无缘无故。 是否有原因导致ContentResolver无法findContentProvider(即如果尚未设置)?

将多个参数放入ContentResolver.requestSync

我正在制作一个具有syncAdapter的应用。 我希望能够与一些将通过其捆绑发送的参数一起执行requestSync。 原因是我希望选择syncAdapter实例会做什么。 由于某种原因,putSerializable和putIntArray都会导致ContentResolver抛出exception: 08-16 14:34:49.080: E/AndroidRuntime(10318): java.lang.IllegalArgumentException: unexpected value type: java.util.MiniEnumSet 08-16 14:34:49.080: E/AndroidRuntime(10318): at android.content.ContentResolver.validateSyncExtrasBundle(ContentResolver.java:1144) 08-16 14:34:49.080: E/AndroidRuntime(10318): at android.content.ContentResolver.requestSync(ContentResolver.java:1111) 08-16 14:34:49.080: E/AndroidRuntime(10318): at com.sciatis.syncer.syncing.SyncAdapter.requestSync(SyncAdapter.java:100) 08-16 14:34:49.080: E/AndroidRuntime(10318): at … 为什么会这样? 有没有办法克服这个? 把一个整数运行正常,但那些操作没有。 难道我做错了什么 ? 有没有更好的方法来实现从活动向syncAdapter发送参数?

使用MockContentResolver进行查询会导致NullPointerException

我们有一个JUnit测试类,它扩展了ActivityInstrumentationTestCase2 。 测试(以及我们正在测试的类)使用CommentContentProvider扩展ContentProvider来访问SQLite数据库,我们在提供者上运行查询时得到NullPointerException [下面的完整堆栈跟踪]。 我们实例化一个MockContentResolver ,如下所示: MockContentResolver mResolver; public void setUp() { super.setUp(); CommentContentProvider ccp = new CommentContentProvider(); mResolver = new MockContentResolver(); mResolver.addProvider(CommentContentProvider.AUTHORITY, ccp); } 稍后,在我们的测试中,当调用以下代码时,我们得到一个NullPointerException : Cursor mCursor = mResolver.query(Uri.parse(mUri), null, null, null, null); 我们得到相同的结果,即使我们等待实例化MockContentResolver直到我们有一个被测活动的副本: mActivity = getActivity(); MockContentResolver mResolver = new MockContentResolver(mActivity); 我们已经validation了mActivity不是空的。 一位同事介入Android源代码(未安装在我们的系统上),发现错误的最直接原因是getContext()在ContentProvider.enforceReadPermissionInner()的第一行返回null。 我们看了一下这个看起来很相似的问题,但我认为这完全是一个不同的问题。 这个问题也是问题的类似症状,但他们没有实例化他们的MockContentResolver 。 我们在实例化我们时遇到了问题。 这是我们得到的堆栈跟踪: java.lang.NullPointerException at android.content.ContentProvider$Transport.enforceReadPermissionInner(ContentProvider.java:449) at […]

SyncAdapter完成后如何通知调用Activity?

在我的Android项目中,我使用自定义SyncAdapter来下载数据并将其存储在本地SQLite数据库中。 public class CustomSyncAdapter extends AbstractThreadedSyncAdapter { public CustomSyncAdapter(Context context, boolean autoInitialize) { super(context, autoInitialize); } @Override public void onPerformSync(Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) { // 1) Download data via AsyncTask // 2) Store data via ContentProvider } } 我使用ContentResolver从主Activity调度sychronization,例如… ContentResolver.requestSync(account, Authentication.AUTHORITY, bundle); 同步完成时是否有通知方式通知调用Activity ?

如何在Android中收听新照片?

我的应用程序处理图像,我可以处理Android设备中已存储的图像。 我也想处理新图像。 是否有任何听众会在新照片到达画廊时通知我? 我一直在寻找两天。 我无法得到任何坚实的东西。 我读到了关于FileObserver ,它会帮我听下载用户下载图片或使用相机拍摄新照片吗?

getcontentresolver()未定义types

我尝试获取所有联系人姓名和号码,我正在尝试使用getContentResolver但我得到了 方法获取内容解析器()未定义types 这个错误。 我该如何解决? 以下是代码: public class ContactManager { public ArrayList getContactNumber() { Cursor phones = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); while (phones.moveToNext()) { String name = phones .getString(phones .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); String phoneNumber = phones .getString(phones .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); } phones.close(); } }

麻烦编写内部内存android

void launchImageCapture(Activity context) { Uri imageFileUri = context.getContentResolver() .insert(Media.INTERNAL_CONTENT_URI, new ContentValues()); m_queue.add(imageFileUri); Intent i = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); i.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, imageFileUri); context.startActivityForResult(i, ImportActivity.CAMERA_REQUEST); } 以上代码一直有效,现在在insert()中为我生成了这个例外。 java.lang.UnsupportedOperationException: Writing to internal storage is not supported. at com.android.providers.media.MediaProvider.generateFileName(MediaProvider.java:2336) at com.android.providers.media.MediaProvider.ensureFile(MediaProvider.java:1851) at com.android.providers.media.MediaProvider.insertInternal(MediaProvider.java:2006) at com.android.providers.media.MediaProvider.insert(MediaProvider.java:1974) at android.content.ContentProvider$Transport.insert(ContentProvider.java:150) at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:140) at android.os.Binder.execTransact(Binder.java:287) at dalvik.system.NativeStart.run(Native Method) 这不是一个空间问题,我唯一改变的是一个不相关的类的包。 另外,我重新启动了手机。

Android:根据电话号码搜索联系人

我必须根据电话号码搜索联系人。 以下是用于获取联系人的代码。 我使用的Android API级别是15 String[] projection = new String[] { ContactsContract.CommonDataKinds.Phone._ID, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.TYPE, ContactsContract.CommonDataKinds.Phone.NUMBER}; Cursor query = mContent.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, ContactsContract.CommonDataKinds.Phone.NUMBER + ” LIKE ‘%” + constraint.toString() + “%'” ,null, ContactsContract.Contacts.DISPLAY_NAME + ” COLLATE LOCALIZED ASC”); 我能够在联系人表格中保存的电话号码中获取没有空格的联系人。 如果电话号码之间有空格,则上述查询失败。 例如,对于联系人,如果电话号码保存为1234567890,并且当我使用值1234搜索时,将检索此联系人。 但如果联系人保存为“123 456 7890”,则会失败。 最重要的是,当我尝试搜索包含或包含“1234”电话号码的联系人时,结果应该返回电话号码为“1234567890”和“123 4567 890”的联系人。 由于一些Android手机节省了电话号码之间的空间。 我该如何解决这个问题。 任何帮助表示赞赏。

Android:如何使用contentResolver仅更新多个记录中的一列

如何使用内容解析器更新多个记录的一个特定列? update(Uri uri, ContentValues values, String where, String[] selectionArgs) 上面的函数是否要求我重写contentValues对象中每条记录的所有值? 当我使用这个函数只有一个值,如: ContentValues value = new ContentValues(); value.put (Voicemails.IS_READ, 1 );//mark as read int iRowsUpdated=contentResolver.update(uri, value, null, null); 然后我得到了exception“无法更新URI:content://com.android.voicemail/voicemail?…不支持批量更新”,这可能是因为“where”设置为null; 一个教程提到“要批量更新内容提供程序中的一组记录,请调用ContentResolver.update()方法,并使用要更改的列和值。” 但我无法做到这一点……我仍然不知道如何只更新所有记录中的一列,基本上我需要将阅读的语音邮件标记为已读。

外部(例如脸书)联系人在android上的照片

我写了一个短信应用程序,在概述中显示了我的联系人的联系人照片。 获得“正常”照片是没有问题的: Uri cu = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId); final InputStream input = Contacts.openContactPhotoInputStream(getContext().getContentResolver(), cu); return BitmapFactory.decodeStream(input); 问题是:例如facebook提供的联系人照片不存在,我怎样才能获得这些“外部”照片?