Android Contacts合同不返回电话号码,而是返回姓名

Android Contacts合同不返回电话号码,而是返回姓名,android,android-contacts,contactscontract,Android,Android Contacts,Contactscontract,我已使用此代码显示我的手机的名称和电话号码,即使它只返回名称,如果您有任何回答,我将不胜感激。如果我同步了谷歌账户,它也能工作吗 代码: 公共类MainActivity扩展了ActionBarActivity{ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main

我已使用此代码显示我的手机的名称和电话号码,即使它只返回名称,如果您有任何回答,我将不胜感激。如果我同步了谷歌账户,它也能工作吗

代码: 公共类MainActivity扩展了ActionBarActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Cursor people = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
    if (people != null && people.moveToFirst()) {
        do {
            try {
                int nameFieldColumnIndex = people.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
                String contact = people.getString(nameFieldColumnIndex);
                Log.d("CONTACT: ", contact);
                int numberFieldColumnIndex = people.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);
                String number = people.getString(numberFieldColumnIndex);
                Log.d("NUMBER: ", number);
            } catch (Exception e) {
                Log.e("ERROR: ", e.toString());
            }

        } while (people.moveToNext());
    }
}
错误:

  04-16 05:16:27.839    1426-1426/com.chatter.contactsaccess D/CONTACT:﹕ Test
04-16 05:16:27.839    1426-1426/com.chatter.contactsaccess D/NUMBER:﹕ 1
已编辑

没有

联系人contract.PhoneLookup.NUMBER

出现在

Contacts contract.Contacts.CONTENT\u URI

,使用

Contacts contract.Contacts.HAS\u电话号码


您可以尝试以下代码获取手机中的所有电话联系人

在创建活动时,传递打开电话联系人的意图,如

private static final int PICK_CONTACT=1;

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
                    startActivityForResult(intent, PICK_CONTACT);
并在onAcivityResult中获取所选联系人的详细信息,如下所示

public void onActivityResult(int reqCode, int resultCode, Intent data) {
        if(reqCode==0)return;
        super.onActivityResult(reqCode, resultCode, data);

        switch (reqCode) {
            case (PICK_CONTACT) :
                if (resultCode == Activity.RESULT_OK) {

                    Uri contactData = data.getData();
                    ContentResolver cr=getActivity().getContentResolver();
                    final Cursor c =  cr.query(contactData, null, null, null, null);

                    if (c.moveToFirst()) {
                        ArrayList<String> alNumbers=new ArrayList<>();


                        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 = getActivity().getContentResolver().query(
                                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
                                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id,
                                    null, null);
                            if(phones.moveToFirst())
                            {
                                while(!phones.isAfterLast())
                                {
                                    cNumber = phones.getString(phones.getColumnIndex("data1"));
                                    alNumbers.add(cNumber);
                                    phones.moveToNext();
                                }
                            }
                            phones.close();
                            final CharSequence[] items = alNumbers.toArray(new String[alNumbers.size()]);
                            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                            builder.setTitle("Choose a number");
                            builder.setItems(items, new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int item) {
                                    cNumber = items[item].toString();
                                    name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                                    phone.setText(name+" ("+cNumber+")");
                                }
                            });
                            AlertDialog alert = builder.create();
                            if(alNumbers.size() > 1) {
                                alert.show();



                               }
 name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
}
activityresult上的公共void(int-reqCode、int-resultCode、Intent-data){
如果(reqCode==0)返回;
super.onActivityResult(请求代码、结果代码、数据);
开关(reqCode){
案例(选择联系人):
if(resultCode==Activity.RESULT\u确定){
Uri contactData=data.getData();
ContentResolver cr=getActivity().getContentResolver();
最终光标c=cr.query(contactData,null,null,null,null);
if(c.moveToFirst()){
ArrayList alNumbers=新的ArrayList();
字符串id=c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._id));
String hasPhone=c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
if(hasPhone.equalsIgnoreCase(“1”)){
光标=getActivity().getContentResolver().query(
ContactsContract.CommonDataTypes.Phone.CONTENT\u URI,null,
contacts contract.commonDataTypes.Phone.CONTACT_ID+“=”+ID,
空,空);
if(phones.moveToFirst())
{
而(!phones.isAfterLast())
{
cNumber=phones.getString(phones.getColumnIndex(“data1”);
alNumbers.add(cNumber);
phones.moveToNext();
}
}
电话。关闭();
final CharSequence[]items=alNumbers.toArray(新字符串[alNumbers.size()]);
AlertDialog.Builder=新建AlertDialog.Builder(getActivity());
builder.setTitle(“选择一个数字”);
setItems(items,新的DialogInterface.OnClickListener()对话框){
公共void onClick(对话框接口对话框,int项){
cNumber=items[item].toString();
name=c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_name));
phone.setText(name+”(“+cNumber+”);
}
});
AlertDialog alert=builder.create();
如果(alNumbers.size()>1){
alert.show();
}
name=c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_name));
}

我通过更改
Contacts contract.Contacts.CONTENT\u URI
Contacts contract.commondatatypes.Phone.CONTENT\u URI

截取的代码如下(我只想得到字符串中的姓名和电话):


像这样使用游标,首先使用if条件,然后执行while循环if(people!=null&&people.moveToFirst()){do{//您的代码}while(people.moveToNext()}输出仍然是一样的,你解决了吗?它返回1,但我如何获得号码doesn似乎不起作用,他使用的是不推荐的方法,他的函数HAST_PHONE…返回0如果它返回0尝试单击其他号码,如果它返回1,你将获得号码,可能它没有电话号码,不,有电话号码i不推荐使用。
managedQuery(contactData,null,null,null,null);
不推荐使用,我刚刚创建了一个带有数字的人。
public void onActivityResult(int reqCode, int resultCode, Intent data) {
        if(reqCode==0)return;
        super.onActivityResult(reqCode, resultCode, data);

        switch (reqCode) {
            case (PICK_CONTACT) :
                if (resultCode == Activity.RESULT_OK) {

                    Uri contactData = data.getData();
                    ContentResolver cr=getActivity().getContentResolver();
                    final Cursor c =  cr.query(contactData, null, null, null, null);

                    if (c.moveToFirst()) {
                        ArrayList<String> alNumbers=new ArrayList<>();


                        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 = getActivity().getContentResolver().query(
                                    ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,
                                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id,
                                    null, null);
                            if(phones.moveToFirst())
                            {
                                while(!phones.isAfterLast())
                                {
                                    cNumber = phones.getString(phones.getColumnIndex("data1"));
                                    alNumbers.add(cNumber);
                                    phones.moveToNext();
                                }
                            }
                            phones.close();
                            final CharSequence[] items = alNumbers.toArray(new String[alNumbers.size()]);
                            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                            builder.setTitle("Choose a number");
                            builder.setItems(items, new DialogInterface.OnClickListener() {
                                public void onClick(DialogInterface dialog, int item) {
                                    cNumber = items[item].toString();
                                    name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                                    phone.setText(name+" ("+cNumber+")");
                                }
                            });
                            AlertDialog alert = builder.create();
                            if(alNumbers.size() > 1) {
                                alert.show();



                               }
 name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
}
Cursor people = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);

        while(people.moveToNext()) {
            int nameFieldColumnIndex = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
            String contact = people.getString(nameFieldColumnIndex);
            int numberFieldColumnIndex = people.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
            String number = people.getString(numberFieldColumnIndex);
            Log.e("CONTACT: ", contact + " " + number);
        }

        people.close();