android - Android中查询、备份、删除、插入联系人

标签 android contacts crud android-contentprovider contact

对于我们所有想要在 Android 中操作联系人的人来说,这个问题应该是一个起点。

要事第一

据我所知,自 API 级别 5 以来,Contacts API 已更改,因此为了使应用程序正常工作,我需要检查手机上的 android 操作系统是什么,如果之前的 5 级使用一个内容提供商,或者使用较新的。在这种情况下,唯一的烦恼是我收到了已弃用的警告。该应用程序是针对 Android 2.3.3 构建的,但需要从 1.5+ 开始工作

<强>1。查询联系人

这是最简单的部分。通常查询意味着获取联系人姓名、电话、图片、电子邮件等数据并将其显示在 ListView 中。例如,这是我在 5 之前的 API 中完成的方式

            String[] projectionPeople = new String[] {People._ID, People.NAME,};
            String[] projectionPhone = new String[] {Phones.NUMBER};

                try {
                    // Get the base URI for People table in Contacts content provider. 
                    // which is: content://contacts/people/ 
                    Uri contactUri = People.CONTENT_URI; 
                    ContentResolver resolver = getContentResolver();

                    Cursor phonesCursor = null;
                    Cursor peopleCursor = resolver.query (contactUri, 
                                                        projectionPeople, //Which columns to return. 
                                                        "People.NAME is not null", // WHERE clause--we won't specify. 
                                                        null, // Selection Args?? 
                                                        People.DEFAULT_SORT_ORDER); // Order-by name 

                    if (peopleCursor != null && peopleCursor.getCount() >0)
                    {
                        // go to the beginning of the list 
                        peopleCursor.moveToFirst(); 

                        do
                        {
                                    //do something with current contact info
                            phoneUri= Uri.withAppendedPath(personUri, Contacts.People.Phones.CONTENT_DIRECTORY); 

                            phonesCursor = resolver.query(phoneUri, 
                                                         projectionPhone, 
                                                         null, 
                                                         null, 
                                                         Phones.DEFAULT_SORT_ORDER); 

                            if (phonesCursor!=null && phonesCursor.getCount()>0)
                            {
                                phonesCursor.moveToFirst();
                                lstPhones = new ArrayList<String>();

                                do
                                {
                                    //add phone numbers to a List<String> for instance
                                } while (phonesCursor.moveToNext());


                            if (phonesCursor != null && !phonesCursor.isClosed())
                                phonesCursor.close();

                        }  while (peopleCursor.moveToNext());

                        if (peopleCursor != null && !peopleCursor.isClosed())
                            peopleCursor.close();
                    }
                }
                catch (Exception ex) 
                {

                }
            }

还没有在新的 api 上尝试过,但是光标应该是这样的

final String[] projection = new String[] {
                                          RawContacts.CONTACT_ID,   // the contact id column
                                          RawContacts.DELETED       // column if this contact is deleted
};

final Cursor rawContacts = managedQuery(RawContacts.CONTENT_URI,    // the URI for raw                                                                                                              contact provider
                                            projection
                                             null,                  // selection = null, retrieve all entries
                                             null,                  // selection is without parameters
                                             null);                 // do not order

当然,这需要详细说明,但它应该提供针对联系人内容提供者的简单查询的基础知识

<强>2。备份

对此,我的第一个想法是:如果我知道联系人的 ID,我就可以在 sqlite 数据库中创建与游标列完全相同的表,并将所有数据插入到我的表中。这不是一件容易的事,因为它需要大量的编码,更不用说不同的 api 具有不同的表结构。备份一个联系人或多个联系人的最佳解决方案是什么?

<强>3。删除

这应该适用于所有使用内容提供者的 api,但数据分布在许多包和 uris 上,我不确定从哪里删除

<强>4。插入

联系人备份后,我可能需要重新恢复/插入。在删除的情况下,我需要在哪个 uris 上插入?

请让我们尝试详细说明这个问题,以便将来需要在 Android 应用程序中使用联系人的人可以将这个问题作为一个坚实的起点。感谢 stackoverflow 社区。

最佳答案

关于android - Android中查询、备份、删除、插入联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6938388/

相关文章:

javascript - React JS Crud 可变数据问题

android - 如何使用 Flutter 将整数存储到 Firestore

java - 从可绘制图像到数据库

android - 在谷歌地图自定义标记不显示在三星 S8 或相同版本 7.0 在 Android

javascript - 使用 Cordova iOS 显示联系人的所有信息

ios - 从 CNContactStore 获取所有 CNGroup

sql-server - SQL 服务器 : find out if a db table has changed (using entity framework)

android - ADB复制最新的文件

java - 读姓名 联系方式

java - 对用户进行 CRUD、自制 bean 还是持久方法?