获取联系人号码

时间:2015-03-16 12:57:13

标签: android android-intent android-activity

我在获取所选联系人数时遇到问题。在我的应用程序中,我将联系人的内置应用程序称为新活动,当您选择联系人时,活动将返回其姓名,现在我需要它返回用户为该联系人输入的所有号码。我在互联网上的一些教程中找到了代码......这是代码

这就是我如何称呼联系活动

mSuspectButton = (Button) v.findViewById(R.id.crime_suspect);

mSuspectButton.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                Intent i = new Intent(Intent.ACTION_PICK,
                        ContactsContract.Contacts.CONTENT_URI);
                startActivityForResult(i, REQUEST_CONTACT);
            }
        });

这就是我获取所选联系人姓名的方式:

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (resultCode != Activity.RESULT_OK)
            return;
        if (requestCode == REQUEST_CONTACT) {
            Uri contactUri = data.getData();
            // Specify which fields you want your query to return
            // values for.
            String[] queryFields = new String[] { 
                    ContactsContract.Contacts.DISPLAY_NAME };
            // Perform your query - the contactUri is like a "where"
            // clause here
            Cursor c = getActivity().getContentResolver().query(contactUri,
                    queryFields, null, null, null);
            // Double-check that you actually got results
        if (c.getCount() == 0) {
            c.close();
            return;
        }
        // Pull out the first column of the first row of data -
        // that is your suspect's name.
        c.moveToFirst();
        String suspect = c.getString(0);
        mCrime.setSuspect(suspect);
        mSuspectButton.setText(suspect);
        c.close();
    }
}

所以请任何人帮忙,我真的不明白这些是如何运作的?

2 个答案:

答案 0 :(得分:0)

1)编写此代码以获取所有联系人号码和姓名。

2)将它们添加到单独的arraylists中。

Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null);
            while (phones.moveToNext())
            {
                String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)).replaceAll(" ", "");
                alContactNames.add(name);
                alContactNumbers.add(phoneNumber);
            }
            phones.close();

3)使用自定义适配器在您的应用中制作列表视图。在每个列表项中,需要有联系号码,联系人姓名和复选框供选择。

这将解决您的问题。

答案 1 :(得分:0)

在onActivityResult中使用此功能,这将返回所选的数字

    @Override
        public void onActivityResult(int reqCode, int resultCode, Intent data){ 
super.onActivityResult(reqCode, resultCode, data);

        switch(reqCode){
        case (PICK_CONTACT):
            if (resultCode == Activity.RESULT_OK){
                Uri contactData = data.getData();
                Cursor c = managedQuery(contactData, null, null, null, null);
                if (c.moveToFirst()){
                    String id = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID));

                    String hasPhone =
                            c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

                    if (hasPhone.equalsIgnoreCase("1")) {
                        Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, 
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id,null, null);
                        phones.moveToFirst();
                        String cNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

                    }
                }
            }
        }
        }