Android联系表问题

时间:2011-09-06 22:37:46

标签: android contact

在我的应用中,用户可以点击手机中的联系人,然后查看他的联系表。我在没有问题的情况下测试了我的HTC。然后我在中兴通讯上进行了测试,出现了一个奇怪的事情:如果我点击某些人查看他们的联系表,另一个联系表出现在另一个人身上。还有一个功能是呼叫这些人,我没有遇到任何问题。所以例如我点击Tim Burton查看他的联系表,我得到了Tim Burton的联系表。然后我点击布鲁斯威利斯,我得到马克斯佩恩的联系表。

在中兴的情况下可能是必要的来自旧手机(使用Symbian)导入的联系人,这可能会导致某种问题。所以布鲁斯威利斯可能是从那部手机进口的(手机的主人不知道这一点)。 我在没有导入联系人的情况下在另一个中兴通联系表没有问题。所以要么我的代码需要改进,要么这是一个错误。

以下是我跳转到所选联系人的联系表的代码: ( name1 变量具有所选联系人的姓名,例如Br​​uce W)

 infobtn.setOnClickListener(new View.OnClickListener() 
         {
            public void onClick(View v) 
            { 
                ContentResolver cr = getContentResolver();
                Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

                if (cur.getCount() > 0) 
                {

                    while (cur.moveToNext()) {
                    id_contact = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                    name_contact = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                        if (name_contact.equals(name1))
                        {
                        Cursor pCur = cr.query(
                        ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, 
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{id_contact}, null);
                           id_contact2 = id_contact;

                            while (pCur.moveToNext()){
                            } 
                        pCur.close();
                        }
                    }
                    Intent intent_contacts = new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people/" + id_contact2));
                    startActivity(intent_contacts);
                }

            }
         });

提前致谢,

erdomester

1 个答案:

答案 0 :(得分:0)

我找到了方法。原因是我使用了弃用的意图。这是正确的代码:

String  contactid26 = null;

                ContentResolver contentResolver = getContentResolver();

                Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phonenumintolist));

                Cursor cursor =  
                   contentResolver.query(
                        uri, 
                        new String[] {PhoneLookup.DISPLAY_NAME, PhoneLookup._ID}, 
                        null, 
                        null, 
                        null);

                if(cursor!=null) {
                  while(cursor.moveToNext()){
                    String contactName = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup.DISPLAY_NAME));
                   contactid26 = cursor.getString(cursor.getColumnIndexOrThrow(PhoneLookup._ID));

                  }
                  cursor.close();
                }
                if (contactid26 == null)
                    {
                        Toast.makeText(DetailedCallHistory.this, "No contact found associated with this number", Toast.LENGTH_SHORT).show();
                    }
                    else
                    {
                        Intent intent_contacts = new Intent(Intent.ACTION_VIEW, Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(contactid26)));
                        //Intent intent_contacts = new Intent(Intent.ACTION_VIEW, Uri.parse("content://contacts/people/" + contactid26));  //deprecated!
                        startActivity(intent_contacts);
                    }