Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Api-从联系人获取手机号码_Android_Api_Contacts - Fatal编程技术网

Android Api-从联系人获取手机号码

Android Api-从联系人获取手机号码,android,api,contacts,Android,Api,Contacts,我尝试了很多教程,在这里读了很多书,但我无法解决我的问题: 单击按钮时,用户可以选择联系人的手机号码。实际上,我可以获取所选联系人的姓名,但我找不到获取/选择手机号码的方法 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); /** Layouting */ this.mGetMob

我尝试了很多教程,在这里读了很多书,但我无法解决我的问题:

单击按钮时,用户可以选择联系人的手机号码。实际上,我可以获取所选联系人的姓名,但我找不到获取/选择手机号码的方法

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    /** Layouting */
    this.mGetMobileNumberButton = (Button)findViewById(R.id.getMobileNumberButton);
    this.mNameTextView = (TextView)findViewById(R.id.nameTextView);
    this.mMobileNumberTextView = (TextView)findViewById(R.id.mobileNumberTextView);


    /** onClick getContactInfos*/
   this.mGetMobileNumberButton.setOnClickListener(new OnClickListener() {
      public void onClick(View v){ 
          Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
          startActivityForResult(intent, 1);        
      } 
    });
}

@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
    super.onActivityResult(reqCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) {
        Uri contactData = data.getData();
        Cursor c = managedQuery(contactData, null, null, null, null);
        if (c.moveToFirst()) {
            String name = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
            mNameTextView.setText(name);
        }
    }
}

希望任何人都能提供帮助:

这将获得光标,光标将包含基本联系人数据,并将循环浏览联系人的电话号码,可以有多个

    Uri uri = data.getData();
Cursor cursor=ctx.getContentResolver().query(uri, null, null, null, null);

   while (cursor.moveToNext()) { 
   String contactId = cursor.getString(cursor.getColumnIndex( 
     ContactsContract.Contacts._ID)); 
   String hasPhone = cursor.getString(cursor.getColumnIndex( 
     ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
   if (Boolean.parseBoolean(hasPhone)) { 
                // You know have the number so now query it like this
Cursor phones = getContentResolver().query( 
  ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
  null, 
  ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, 
      null, null); 
    while (phones.moveToNext()) { 
     String phoneNumber = phones.getString( 
       phones.getColumnIndex( 
         ContactsContract.CommonDataKinds.Phone.NUMBER));                 
    } 
    phones.close(); 
   } 
 }

这将获取包含基本联系人数据的光标,并将循环浏览联系人的电话号码,可以有多个

    Uri uri = data.getData();
Cursor cursor=ctx.getContentResolver().query(uri, null, null, null, null);

   while (cursor.moveToNext()) { 
   String contactId = cursor.getString(cursor.getColumnIndex( 
     ContactsContract.Contacts._ID)); 
   String hasPhone = cursor.getString(cursor.getColumnIndex( 
     ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
   if (Boolean.parseBoolean(hasPhone)) { 
                // You know have the number so now query it like this
Cursor phones = getContentResolver().query( 
  ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
  null, 
  ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, 
      null, null); 
    while (phones.moveToNext()) { 
     String phoneNumber = phones.getString( 
       phones.getColumnIndex( 
         ContactsContract.CommonDataKinds.Phone.NUMBER));                 
    } 
    phones.close(); 
   } 
 }

除非你从电话中获得所有联系信息,然后你通过一对一测试结果是否有号码。您可以在查询函数中设置条件

Uri uri = data.getData();
Cursor cursor=ctx.getContentResolver().query(uri, null, ContactsContract.Contacts.HAS_PHONE_NUMBER + " = 1", null, null);
没有此测试,其余代码将相同:

   String hasPhone = cursor.getString(cursor.getColumnIndex( 
     ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
   if (Boolean.parseBoolean(hasPhone)) {

除非你从电话中获得所有联系信息,然后你通过一对一测试结果是否有号码。您可以在查询函数中设置条件

Uri uri = data.getData();
Cursor cursor=ctx.getContentResolver().query(uri, null, ContactsContract.Contacts.HAS_PHONE_NUMBER + " = 1", null, null);
没有此测试,其余代码将相同:

   String hasPhone = cursor.getString(cursor.getColumnIndex( 
     ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
   if (Boolean.parseBoolean(hasPhone)) {

谢谢你的回答,但我不知道在这一行中如何处理ctx:ursor cursor=ctx.getContentResolver.queryuri,null,null,null;它仍然不工作,我用这个替换了ctx。当我说mAnything.setTextcontactId时,它起作用了。但是当我尝试很多东西的时候,setTextphoneNumber是不起作用的:你做错了什么,举杯庆祝,看看结果是否会出现。上面的代码工作得很好。请参阅此处的工作教程:好的,我想我明白了,如果Boolean.parseBooleanhasPhone在我的代码中不起作用,我将其替换为if Integer.parseIntcursor.getString cursor.getColumnIndexContactsContract.Contacts.HAS_PHONE_NUMBER>0感谢您的回答,但是我不知道在这行中如何处理ctx:ursor cursor=ctx.getContentResolver.queryuri,null,null,null,null;它仍然不工作,我用这个替换了ctx。当我说mAnything.setTextcontactId时,它起作用了。但是当我尝试很多东西的时候,setTextphoneNumber是不起作用的:你做错了什么,举杯庆祝,看看结果是否会出现。上面的代码工作得很好。请参阅此处的工作教程:好的,我想我明白了,如果Boolean.parseBooleanhasPhone在我的代码中不起作用,我将其替换为if Integer.parseIntcursor.getString cursor.getColumnIndexContactsContract.Contacts.HAS_PHONE_NUMBER>0