问题描述
我正在尝试列出联系人(姓名+手机号码)。 以下是我使用的实际代码:
private void listContactLookupKey() {
final String[] PROJECTIONS = {
ContactsContract.Contacts._ID,ContactsContract.Contacts.LOOKUP_KEY,Build.VERSION.SDK_INT
>= Build.VERSION_CODES.HONEYCOMB ?
ContactsContract.Contacts.disPLAY_NAME_PRIMARY :
ContactsContract.Contacts.disPLAY_NAME,ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID
};
final String SELECTION =
ContactsContract.Data.MIMETYPE + " = '"
+ ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE + "'"
+ " AND " +
ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID + " = "
+ 48;
Cursor c = mContentResolver.query(
ContactsContract.Data.CONTENT_URI,PROJECTIONS,SELECTION,null,null
);
mLookupKeys = new ArrayList<String>( c.getCount() );
for(c.movetoFirst(); ! c.isAfterLast(); c.movetoNext()) {
android.util.Log.i("CONTACTS","_ID=" + c.getLong(0) +","+
"LOOKUP_KEY=" + c.getString(1) +","+
"NAME="+c.getString(2) +","+
"GROUP_ROW_ID=" + c.getLong(3)
);
mLookupKeys.add(c.getString(1));
}
}
private void listContactsInGroup() {
final String[] PROJECTIONS = {
ContactsContract.Contacts._ID,ContactsContract.CommonDataKinds.Phone.norMALIZED_NUMBER,ContactsContract.Contacts.LOOKUP_KEY
};
StringBuilder argBuilder = new StringBuilder();
for(int i=0; i<mLookupKeys.size(); i++) {
argBuilder.append("'" + mLookupKeys.get(i) + "'");
if( i < mLookupKeys.size()-1 )
argBuilder.append(",");
}
android.util.Log.i("CONTACT","arg= "+argBuilder.toString());
String SELECTION =
ContactsContract.Data.MIMETYPE + " = '"
+ ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE
+ "' AND " +
ContactsContract.CommonDataKinds.Phone.TYPE + " = '"
+ ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE
+ "' AND " +
ContactsContract.Contacts.LOOKUP_KEY + " IN ("+argBuilder.toString()+")";
String[] arg = {argBuilder.toString() };
Cursor c = mContentResolver.query(
ContactsContract.Data.CONTENT_URI,null
);
for(c.movetoFirst(); ! c.isAfterLast(); c.movetoNext()) {
android.util.Log.i("CONTACTS","NAME="+c.getString(1) +","+
"norMALIZED_NUMBER=" + c.getString(2) +","+
"LOOKUP_KEY=" + c.getString(3)
);
}
}
@Override
public void run() {
listContactLookupKey();
listContactsInGroup();
}
两个问题: 首先,我得到一个包含多次相同数字的列表,如:
"Germain D." "+33......"
"Germain D." "+33......"
"Other Person" "12356"
可能是由于多个帐户出现了相同的号码(Google,Whatsapp等)
第二,代码似乎太长了。我是否缺少执行此操作的快捷方式?
我阅读了有关Contact Provider的Android开发人员主题,很难理解。 https://developer.android.com/guide/topics/providers/contacts-provider 根据表的结构,目标是首先将联系人的LOOKUP_KEY分组,然后再获取联系人名称和手机号码,首先要获取LOOKUP_KEYs。
请问有人可以帮助我吗?
谢谢
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)