Articles of android contentresolver

按排序顺序显示联系人.ContactContract.Contacts of Content Resolver

我的目的是使用android中的content resolver以排序顺序显示联系人。 为此,我写道: Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ ” = ?”, new String[] { id }, null); 它需要查询方法中的最后一个参数不应为null,以便按Name对元素进行排序。 我必须用哪一部分代码替换null参数来实现按名称排序? 或者请帮我查询一下这种情况…… 提前致谢

如何解决多个内容提供商?

我创建了两个内容提供程序,它们在同一个SQLite数据库的两个不同的表上工作。 他们共享一个SQLiteOpenHelper实例,如Ali Serghini的post所述 。 每个内容提供商都在AndroidManifest.xml注册,如下所示。 每个内容提供商定义所需的内容URI并提供UriMatcher 。 public class PostsProvider extends BaseContentProvider { private static final UriMatcher sUriMatcher = buildUriMatcher(); private static final int POSTS = 100; private static final int POST_ID = 101; private static UriMatcher buildUriMatcher() { final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); final String authority = CustomContract.CONTENT_AUTHORITY; matcher.addURI(authority, DatabaseProperties.TABLE_NAME_POSTS, POSTS); matcher.addURI(authority, DatabaseProperties.TABLE_NAME_POSTS […]

如何从Android获取whatsapp联系人?

我试图通过电话获得whatsapp联系,我得到whatsapp联系的总数,但是从RawContacts如何获得whatsapp我不知道的号码和名称。 我试图find解决方案,但无法得到确切的解决方案。 请帮帮我。 我把我的代码放在下面。 ContentResolver cr = context.getContentResolver(); Cursor c = cr.query( ContactsContract.RawContacts.CONTENT_URI, new String[] { ContactsContract.RawContacts.CONTACT_ID, ContactsContract.RawContacts.DISPLAY_NAME_PRIMARY }, ContactsContract.RawContacts.ACCOUNT_TYPE + “= ?”, new String[] { “com.whatsapp” }, null); ArrayList myWhatsappContacts = new ArrayList(); String projection[] = { ContactsContract.CommonDataKinds.Phone.NUMBER }; if(c != null) { if (c.getCount() > 0) { while (c.moveToNext()) { String whatsappContactId = […]

将video插入MediaStore

我正在尝试将video插入MediaStore ,就像使用此方法存储图像一样: MediaStore.Images.Media.insertImage(getContentResolver(), imagePath, null, null) 由于MediaStore.Video.Media上没有类似的方法,我试图将记录插入MediaStore.Video.Media.EXTERNAL_CONTENT_URI ,然后将文件复制到目的地,如下所示: ContentValues values = new ContentValues(); values.put(MediaStore.Video.Media.TITLE, “Title1”); values.put(MediaStore.Video.Media.MIME_TYPE, “video/mp4”); values.put(MediaStore.Video.Media.DATA, videoPath); Uri uri = cr.insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values); try { OutputStream os = cr.openOutputStream(uri); … … } (FileNotFoundException e) { cr.delete(uri, null, null); } 返回的uri以content://media/external/video/media/{id}的formsnon-null ,这似乎是正确的。 但是当cr.openOutputStream(uri); 如果被激活,则抛出FileNotFoundException 。 最后一点与查看其源代码的Images.Media.insertImage类似。 顺便说一句,我有WRITE_EXTERNAL_STORAGE权限。 另外,我正在测试4.3和4.4。

原始SQLite游标上的registerContentObserver()

我见过的所有使用registerContentObserver()的例子都是通过ContentProvider接口完成的。 但是Cursor有一个registerContentObserver()调用,所以我想也许Android人们已经把一些深层魔法放在一起,当活动结果集中的一行改变时,它允许在SQLite游标上获得更新。 我做错了,或者没有这样的魔法。 这是我正在使用的代码,期望当我点击按钮更新第1行中的值时,我会得到一个onChange()回调。 有任何想法吗? public class MainActivity extends Activity { private static final String DATABASE_NAME = “test.db”; public static final String TAG = “dbtest”; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Button make = (Button)findViewById(R.id.btn_make_record); make.setOnClickListener(new OnClickListener() { public void onClick(View v) { MyOpenHelper […]

当为给定的URI调用ContentResolver.notifyChange()时,ContentObservers是否会通知此URI的后代URI?

一个有希望直截了当的问题:当为给定的URI调用ContentResolver.notifyChange() , ContentObserver是否ContentObserver通知此URI的后代 URI? 例如,假设我有一个游标设置来观察特定资源的URI: Uri uriA = Uri.parse(“content://” + AUTHORITY + “/orders/21”); cursor.setNotificationUri(getContext().getContentResolver(), uriA); 然后我通知ContentResolver对此URI的祖先进行更改(例如,因为我删除了所有订单): Uri uriB = Uri.parse(“content://” + AUTHORITY + “/orders”); getContext().getContentResolver().notifyChange(uriB, null); 我的Cursor ,注册观察uriA ,会被通知吗?

我想获得whatsApp profilepicture但只获取名称和contactnumber?

我想获取WhatsApp个人资料图片和编号,但是使用contentResolver我将使用以下代码段获取名称和编号。 private void showContactWhatsApp(){ ContentResolver cr = getContentResolver(); Cursor contactCursor = cr.query( ContactsContract.RawContacts.CONTENT_URI, new String[]{ContactsContract.RawContacts._ID, ContactsContract.RawContacts.CONTACT_ID}, ContactsContract.RawContacts.ACCOUNT_TYPE + “= ?”, new String[]{“com.whatsapp”}, null); ArrayList myWhatsappContacts = new ArrayList(); if (contactCursor != null) { if (contactCursor.getCount() > 0) { if (contactCursor.moveToFirst()) { do { //whatsappContactId for get Number,Name,Id ect… from ContactsContract.CommonDataKinds.Phone String whatsappContactId = contactCursor.getString(contactCursor.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID)); if […]

我可以使用ContentResolver.query()执行此Android查询吗? (LEFT JOIN和CASE)

我想在Android上执行以下查询(在伪代码中): SELECT C.ID, C.NAME, CASE ISNULL(G.GROUPID,0) = 0 THEN 0 ELSE 1 END INGROUP FROM CONTACTS C LEFT JOIN GROUPMEMBERSHIP G ON G.CONTACTID = C.ID AND G.GROUPID = ? 我希望通过默认的Contacts ContentProvider选择系统通讯录中所有联系人的ID和名称,以及指示联系人是否是组成员的0/1字段? 。 我当然可以很容易地获得所有联系人,然后在我的Adapter类中单独循环并查询成员资格,但我想要执行两个查询,因为一个外部联接查询将产生更好的性能。 我可以使用标准的高级字符串投影和ContentResolver.query()方法吗? 或者这种查询是否需要深入研究更直接的SQL执行?

如何在android中以编程方式删除联系人

我尝试以下代码删除指定号码的联系人: private void removeContact(Context context, String phone) { //context.getContentResolver().delete(Contacts.Phones.CONTENT_URI, phone, null); context.getContentResolver().delete(Contacts.Phones.CONTENT_URI, Contacts.PhonesColumns.NUMBER+”=?”, new String[] {phone}); } 但是我得到了这个例外: java.lang.UnsupportedOperationException: Cannot delete that URL: content://contacts/phones at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:130) at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:110) at android.content.ContentProviderProxy.delete(ContentProviderNative.java:362) at android.content.ContentResolver.delete(ContentResolver.java:386) 你能告诉我如何解决我的问题吗? 谢谢。

Android联系人提供商仅获取所有电子邮件的电话联系人

我需要获取所有手机联系人及其电子邮件地址和照片uri: 这就是我在做什么: private void getContacts() { ContentResolver cr = getContentResolver(); Cursor cur = cr.query(Contacts.CONTENT_URI, null, null, null, Contacts.DISPLAY_NAME); if (cur.getCount() > 0) { while (cur.moveToNext()) { // if // (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) // > 0) { Contact contact = new Contact(); String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); Uri uri = getContactPhotoUri(Long.parseLong(id)); // set photoUri contact.setContactPhotoUri(uri); // set name contact.setContactName(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME))); […]