【问题标题】:Importing phone contacts doesn't import google contacts saved in local database android导入手机联系人不会导入保存在本地数据库 android 中的谷歌联系人
【发布时间】:2017-12-11 18:42:09
【问题描述】:

我想获取手机中保存的手机联系人、SIM 卡联系人和 Google 联系人,但我只能获取手机和 SIM 卡联系人。如果我可以离线访问 Google 联系人,它必须存储在本地数据库中的某个地方。

如何将它们全部导入?我到处搜索,但找不到解决方案。

pDialog = new ProgressDialog(this);
    pDialog.setMessage("Reading contacts...");
    pDialog.setCancelable(false);
    pDialog.show();
//fetching contacts from phone

    contacts_fetched = false;
    contacts_refreshed=false;

    ContentResolver cr = getContentResolver();
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
            null, null, null, null);

    if ((cur != null ? cur.getCount() : 0) > 0) {
        while (cur != null && cur.moveToNext()) {
            String id = cur.getString(
                    cur.getColumnIndex(ContactsContract.Contacts._ID));
            String name = cur.getString(cur.getColumnIndex(
                    ContactsContract.Contacts.DISPLAY_NAME));
            //phoneContactName.add(name);

            if (cur.getInt(cur.getColumnIndex(
                    ContactsContract.Contacts.HAS_PHONE_NUMBER)) > 0) {
                Cursor pCur = cr.query(
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                        null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                        new String[]{id}, null);
                while (pCur.moveToNext()) {
                    String phoneNo = pCur.getString(pCur.getColumnIndex(
                            ContactsContract.CommonDataKinds.Phone.NUMBER)).trim();
                    //getting present country code of mobile
                    GetCountryZipCode(phoneNo);
                    if (CountryZipCode != null) {

                        if (phoneNo.contains("+")) {
                            phoneContactNos.add(phoneNo);
                            //Toast.makeText(this, phoneNo, Toast.LENGTH_SHORT).show();

                        } else {
                            //adding country code if not present
                            phoneNo = CountryZipCode + " " + phoneNo;
                            phoneContactNos.add(phoneNo);
                            //Toast.makeText(this, phoneNo, Toast.LENGTH_SHORT).show();
                        }
                        Log.i(TAG, "Name: " + name);
                        Log.i(TAG, "Phone Number: " + phoneNo);
                        phoneContactName.add(name);
                    }
                }
                pCur.close();
            }
        }
    }
    if (cur != null) {
        cur.close();
    }
//importing contacts from sim
      Uri simUri = Uri.parse("content://icc/adn");
    Cursor cursorSim = this.getContentResolver().query(simUri,null,null,null,null);

  while (cursorSim.moveToNext())
    {
         simContactName=cursorSim.getString(cursorSim.getColumnIndex("name"));
        simContactNo = cursorSim.getString(cursorSim.getColumnIndex("number"));
        simContactNo.replaceAll("\\D","");
        simContactNo.replaceAll("&", "");
        simContactName=simContactName.replace("|","");
        System.out.println("SimContacts"+simContactName);
        System.out.println("SimContactsNo"+simContactNo);
        if(!phoneContactNos.contains(simContactNo))
        {
            GetCountryZipCode(simContactNo);
            if (CountryZipCode != null) {

                if (simContactNo.contains("+")) {
                    phoneContactNos.add(simContactNo);
                    phoneContactName.add(simContactName);
                    //Toast.makeText(this, phoneNo, Toast.LENGTH_SHORT).show();

                } else {
                    //adding country code if not present
                    simContactNo = CountryZipCode + " " + simContactNo;
                    phoneContactNos.add(simContactNo);
                    //Toast.makeText(this, phoneNo, Toast.LENGTH_SHORT).show();
                }
                Log.i(TAG, "Sim Contact Name: " + simContactName);
                Log.i(TAG, "Sim Phone Number: " + simContactNo);
            }
        }

    }

【问题讨论】:

    标签: android google-contacts-api


    【解决方案1】:

    People API 同时是建议的方法 - 与之前的 Contacts API 相比:

    对于用户联系人的读写访问权限,请使用 People API,它使用 JSON 而不是旧的 GData 协议提供联系人和个人资料信息。

    这里不是代码示例,而是 Java quickstart & documentaion

    build.gradle 的依赖项应该是:

    dependencies {
        implementation 'com.google.api-client:google-api-client:1.23.0'
        implementation 'com.google.oauth-client:google-oauth-client-jetty:1.23.0'
        implementation 'com.google.apis:google-api-services-people:v1-rev187-1.23.0'
    }
    

    顺便说一句,这不是CountryZipCode - 而是一个国家(入口)代码。

    【讨论】:

    • CountryZipCode 方法正在用于获取 android 设备的当前国家/地区代码。您能否发布使用 People API 的示例代码?
    • @user8601021 只需查看快速入门,即示例代码......而 ZIP(区域改进计划)代码几乎不用于邮政递送,而不是电话网络。我的意思是,当给变量起这样奇怪的名字时,这并不一定会让生活变得更轻松——虽然它甚至在语义上与developers.google.com/resources/api-libraries/documentation/…发生冲突。
    • 只有方法名称 getCountryZipCode 不正确。它可以满足我的要求,即...获取设备的国家代码
    • @user8601021 只看到人员模型的字段......错误的变量/方法名称只会导致一团糟,一旦处理多个数据模型。国家也没有邮政编码,邮政编码是美国邮政编码。很可能您必须将所有内容都转换为相同类型的 POJO 并可能记住数据源(SIM、电话、谷歌)。
    • 感谢 Martin 我会将方法名称更正为 getCountryCode
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 2011-09-21
    • 2020-12-02
    相关资源
    最近更新 更多