【问题标题】:How to get the connectivity of user from contact list of device?如何从设备的联系人列表中获取用户的连接性?
【发布时间】:2014-12-15 08:41:38
【问题描述】:

是否可以从设备的联系人列表中获取任何联系人的连接?连接如 google+ 帐户的电子邮件 id 和其他第三方 api,我正在搜索它的查询。但没有得到正确的解决方案。所以请朋友们帮我解决这些问题。在此先感谢

【问题讨论】:

    标签: android


    【解决方案1】:

    在联系人提供程序中,联系人的“连接”只是RawContacts 中针对特定CONTACT_ID 的所有条目。他们的数据存储在Data 表中。

    因此,要获取有关联系人所有连接的所有信息,只需使用适当的过滤器查询 Data 表即可。例如:

    private static void getConnections(Context context, int contactId)
    {
        // Read all data for contactId
        String selection = RawContacts.CONTACT_ID + " = ?";
        String[] selectionArgs = new String[] { String.valueOf(contactId) };
    
        Cursor c = context.getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, selection, selectionArgs, null);
        while (c.moveToNext())
        {
            String accountType = c.getString(c.getColumnIndexOrThrow(ContactsContract.RawContacts.ACCOUNT_TYPE));
            String accountName = c.getString(c.getColumnIndexOrThrow(ContactsContract.RawContacts.ACCOUNT_NAME));
            String dataMimeType = c.getString(c.getColumnIndexOrThrow(ContactsContract.Data.MIMETYPE));
            String dataValue = c.getString(c.getColumnIndexOrThrow(ContactsContract.Data.DATA1));
    
            Log.d("contactInfo", accountName + " (" + accountType + ") - " + dataMimeType + " - " + dataValue);
        }
    
        c.close();
    }
    

    您可以使用更严格的selection / selectionArgs 参数(例如特定的ACCOUNT_TYPEMIMETYPE 等)过滤此数据。

    当然,你需要AndroidManifest.xml中的相应权限:

    <uses-permission android:name="android.permission.READ_CONTACTS" />
    

    【讨论】:

    • 非常感谢兄弟..我很快就会尝试你的代码..如果它对我有用,我当然会标记你的答案...再次感谢:)
    • 你好兄弟...我已经使用了您的代码,但问题是我获取所有联系方式而不是传递联系 ID 以从联系人列表中获取用户的特定详细信息...问题是什么我没有正确理解它......
    • @RavindraKushwaha 抱歉,“不正确”是什么意思?
    • 对不起兄弟..我的意思是说我遇到的问题是,当我使用您的代码时,它会显示所有用户(联系人列表)帐户名称和帐户类型
    • @RavindraKushwaha 奇怪,我已经测试过了,它可以工作。你确定你传递了一个确实有Whatsapp连接的联系人ID吗?要获取有联系人的列表,请参阅stackoverflow.com/a/24276984/82788
    【解决方案2】:
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
        if (cur.getCount() > 0) {
            while (cur.moveToNext()) {
                String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                Cursor cur1 = cr.query( 
                        ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                        ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
                                new String[]{id}, null); 
                while (cur1.moveToNext()) { 
                    //to get the contact names
                    String name=cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                    Log.e("Name :", name);
                    String email = cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                    Log.e("Email", email);
                    if(email!=null){
                        names.add(name);
                    }
                } 
                cur1.close();
            }
        }
    

    【讨论】:

      【解决方案3】:

      这是解决方案,它使用类似 Whatsapp 的第三方 API:

      Cursor connectionCur = cr.query(ContactsContract.RawContacts.CONTENT_URI,
                                  new String[]{ContactsContract.RawContacts.ACCOUNT_NAME, ContactsContract.RawContacts.ACCOUNT_TYPE},
                                  ContactsContract.RawContacts.CONTACT_ID +"=?",
                                  new String[]{String.valueOf(id)},
                                  null);
      System.out.println("TOTAL NUMBERS OF COUNTS====================="+connectionCur.getCount());
      if (connectionCur != null && connectionCur.getCount() >0)
      {
          while (connectionCur.moveToNext()) 
          {
              String accountName = connectionCur.getString(connectionCur.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_NAME));
              String accountType = connectionCur.getString(connectionCur.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE));
      
              if(accountType.contains("whatsapp"))
              {
                  Toast.makeText(LoginScreen.this, "whatsapp == "+accountType, Toast.LENGTH_SHORT).show();
              }
              else if(accountType.contains("google"))
              {
                  Toast.makeText(LoginScreen.this, "google == "+accountType, Toast.LENGTH_SHORT).show();
              }
              else if(accountType.contains("facebook"))
              {
                  Toast.makeText(LoginScreen.this, "facebook == "+accountType, Toast.LENGTH_SHORT).show();
              }
              else if(accountType.contains("twitter"))
              {
                  Toast.makeText(LoginScreen.this, "twitter == "+accountType, Toast.LENGTH_SHORT).show();
              }
              else if(accountType.contains("linkedin"))
              {
                  Toast.makeText(LoginScreen.this, "linkedin == "+accountType, Toast.LENGTH_SHORT).show();
              }
              System.out.println("a========="+accountName+"   b====="+accountType);   
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-08
        • 1970-01-01
        • 1970-01-01
        • 2016-05-17
        相关资源
        最近更新 更多