【发布时间】:2014-12-15 08:41:38
【问题描述】:
是否可以从设备的联系人列表中获取任何联系人的连接?连接如 google+ 帐户的电子邮件 id 和其他第三方 api,我正在搜索它的查询。但没有得到正确的解决方案。所以请朋友们帮我解决这些问题。在此先感谢
【问题讨论】:
标签: android
是否可以从设备的联系人列表中获取任何联系人的连接?连接如 google+ 帐户的电子邮件 id 和其他第三方 api,我正在搜索它的查询。但没有得到正确的解决方案。所以请朋友们帮我解决这些问题。在此先感谢
【问题讨论】:
标签: android
在联系人提供程序中,联系人的“连接”只是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_TYPE、MIMETYPE 等)过滤此数据。
当然,你需要AndroidManifest.xml中的相应权限:
<uses-permission android:name="android.permission.READ_CONTACTS" />
【讨论】:
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();
}
}
【讨论】:
这是解决方案,它使用类似 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);
}
}
【讨论】: