当前位置: 代码迷 >> Android >> Android 抉择联系人+返回对应手机号码
  详细解决方案

Android 抉择联系人+返回对应手机号码

热度:81   发布时间:2016-05-01 17:22:43.0
Android 选择联系人+返回对应手机号码
   在我开发的每日短信程序中,有一个这样的功能,就是点击‘选择联系人’按钮,会出现联系人选择界面,点击选择联系人后,会将这个联系人的手机号码加入一个文本框中。关于这个程序介绍和界面可以参看:我的第一个Android程序
   关于选择联系人,可以直接使用Android的内置联系人实现,网上也有些例子,但是有些代码有点问题,有的在模拟器正常,手机上不行,有的手机OK,模拟器不行。原因是在联系人URI使用了硬编码,你可以使用ContactsContract.Contacts.CONTENT_URI常量来增强移植性。
   选择联系人部分代码如下:
mChooseContactButton.setOnClickListener(new Button.OnClickListener(){	@Override	public void onClick(View v) {		// TODO Auto-generated method stub		Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);		SMSSendActivity.this.startActivityForResult(intent, 1);	}	});

    接下来就是获取选择联系人的手机号码,首先需要通过函数onActivityResult获取选择的联系人,然后通过Content Provider查询联系人的手机号码,代码片段如下:
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {	// TODO Auto-generated method stub	super.onActivityResult(requestCode, resultCode, data);	switch(requestCode)	{		case (1) :		{		if (resultCode == Activity.RESULT_OK)		{		Uri contactData = data.getData();		Cursor c = managedQuery(contactData, null, null, null, null);		c.moveToFirst();		String phoneNum=this.getContactPhone(c);		mPhoneNum.setText(phoneNum);				}				break;				}	}			}//获取联系人电话private String getContactPhone(Cursor cursor){	int phoneColumn = cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER);  	int phoneNum = cursor.getInt(phoneColumn); 	String phoneResult="";	//System.out.print(phoneNum);	if (phoneNum > 0)	{	// 获得联系人的ID号		int idColumn = cursor.getColumnIndex(ContactsContract.Contacts._ID);		String contactId = cursor.getString(idColumn);			// 获得联系人的电话号码的cursor;			Cursor phones = getContentResolver().query(			ContactsContract.CommonDataKinds.Phone.CONTENT_URI,			null,			ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ " = " + contactId, 			null, null);			//int phoneCount = phones.getCount();			//allPhoneNum = new ArrayList<String>(phoneCount);			if (phones.moveToFirst())			{					// 遍历所有的电话号码					for (;!phones.isAfterLast();phones.moveToNext())					{                                            						int index = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);						int typeindex = phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE);						int phone_type = phones.getInt(typeindex);						String phoneNumber = phones.getString(index);						switch(phone_type)						{							case 2:								phoneResult=phoneNumber;							break;						}						   //allPhoneNum.add(phoneNumber);					}					if (!phones.isClosed())					{						   phones.close();					}			}	}	return phoneResult;}

   这样,就可以实现通过选择联系人来获取它的手机号码了,代码是我从我程序代码直接拷贝的,需要做部分修改,但是绝对可用。
  相关解决方案