从联系人 Android 中获取一个电话号码
Posted
技术标签:
【中文标题】从联系人 Android 中获取一个电话号码【英文标题】:Get a single phone number from contacts Android 【发布时间】:2014-05-26 19:15:49 【问题描述】:您好,我正在尝试从联系人列表中获取一个电话号码。我找到了可以让我获得整个联系人列表电话号码的代码,我想要的只是所点击项目的电话号码。任何帮助将不胜感激。谢谢..
public void onClick(View v)
Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,Contacts.CONTENT_URI);
startActivityForResult(contactPickerIntent,CONTACT_PICKER_RESULT);
ContentResolver cr = getActivity().getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null,null, null);
if (cur.getCount() > 0)
while (cur.moveToNext())
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID+ " = ?",new String[] id , null);
while (pCur.moveToNext())
String phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Toast.makeText(getActivity(), phoneNo,Toast.LENGTH_SHORT).show();
);
【问题讨论】:
哪个联系人?随机的?还是第一个? 打开联系人列表后点击的联系人..谢谢 【参考方案1】:当您在联系人列表中并单击联系人时,您将获得 Intent.ACTION_PICK
意图的结果。
因此,要处理结果,您必须重写 onActivityResult()
方法。
您在onActivityResult()
返回的数据Intent
对象中收到联系人的查找URI。
所以,你所要做的就是:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
if(requestCode == CONTACT_PICKER_RESULT)
if(resultCode==Activity.RESULT_OK)
Uri uri = data.getData();
ContentResolver contentResolver = getContentResolver();
Cursor contentCursor = contentResolver.query(uri, null, null,null, null);
if(contentCursor.moveToFirst())
String id = contentCursor.getString(contentCursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
String hasPhone =
contentCursor.getString(contentCursor.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 contactNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.i("phoneNUmber", "The phone number is "+ contactNumber);
super.onActivityResult(requestCode, resultCode, data);
那么你只需要对contactNumber
上的值做任何你想做的事情。
希望对你有所帮助。
【讨论】:
非常感谢您的完美工作..感谢您的时间:-)【参考方案2】:首先在 androidManifest.xml 中添加这一行以获得用户的许可。
移动用户也需要允许此权限。可以从设置中手动完成
<uses-permission android:name="android.permission.READ_CONTACTS"/>
现在在按钮单击监听器中编写此代码。
contactsButtton.setOnClickListener(new OnClickListener()
@Override
public void onClick(View view)
Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(contactPickerIntent,1);
);
现在从 onCreate() 函数的外部开始。您必须覆盖 onActivityResult() 函数。 类似的
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode)
case 1 :
if (resultCode == Activity.RESULT_OK)
Uri contactData = data.getData();
ContentResolver cr = getContentResolver();
Cursor cur = cr.query(contactData, null, null, null, null);
if (cur.getCount() > 0) // thats mean some resutl has been found
if(cur.moveToNext())
String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
Log.e("Names", name);
if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0)
// Query phone here. Covered next
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id,null, null);
while (phones.moveToNext())
String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.e("Number", phoneNumber);
phones.close();
cur.close();
break;
【讨论】:
以上是关于从联系人 Android 中获取一个电话号码的主要内容,如果未能解决你的问题,请参考以下文章