您的位置:首页 > 移动开发 > Android开发

Android学习--隐式Intent获取联系人信息或电话

2016-03-11 16:54 441 查看
在学习到隐式Intent的时候,接触到要查阅联系人信息以及电话,在翻阅了一些资料后,自己总结了一些点:

如果需要返回联系人信息或电话的时候,要用到的Intent动作为Intent.ACTION_PICK(返回所选择的信息),而如果要拨打电话的时候有两个Intent动作可供选择:Intent.ACTION_DIAL和Intent.ACTION_CALL,两者的不同在于前者是拨好号码,等用户来发起通话;后者是直接拨打电话。所以推荐用Intent.ACTION_DIAL。

第一步、在需要读取或者修改联系人信息的前要在manifests文件下声明读写权限,否则在后续的调用中会出错。 

<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>
<uses-permission android:name="android.permission.WRITE_CONTACTS"></uses-permission>


第二步、采用ACTION_PICK为动作声明一个隐式Intent。

mSuspectButton = (Button)v.findViewById(R.id.crime_suspectButton);
mSuspectButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);   //声明隐式Intent,从联系人中获取一个返回信息
startActivityForResult(i , REQUEST_CONTACT);

}
}


第三步、在onActivityResult中获取返回的URI,该URI是指向用户所选的联系人的定位符,通过该URI可以查询联系人数据库从而提取出联系人id与姓名。而通过联系人id可以进一步在数据库中提取出联系人的电话。其中联系人名字和id要在ContactsContract.Contacts中获取,而电话则ContactsContract.CommonDataKinds.Phone中获取。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_CONTACT){
Uri contactUri = data.getData();             //该数据URI是一个指向用户所选联系人的定位符
Cursor c = getActivity().getContentResolver().query(contactUri, null, null, null, null); //查询联系人数据库,获得一个可用的Cursor
if(c.moveToFirst()) {                        //将Cursor移动到第一条记录

String suspect = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));        //通过Cursor c获得联系人名字
String id = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));                      //通过Cursor c获得联系人id

Cursor c2 = getActivity().getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + id, null, null);
//在ContactsContract.CommonDataKinds.Phone.CONTENT_URI里,
// 通过上面获得的联系人id获得一个新的Cursor c2

c2.moveToFirst();

String phonenum = c2.getString(c2.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));   //通过Cursor c2获得联系人电话

mCrime.setSuspect(suspect);
mCrime.setPhonenum(phonenum);
mSuspectButton.setText(suspect + ":" + phonenum);
c2.close();                    //关闭Cursor c2
c.close();                     //关闭Cursor c
}
}
}


第四步、获取电话信息后,如需拨打电话则可以创建一个新的隐式Intent,以Intent.ACTION_DIAL为动作进行拨打电话,其中Uri.parse()辅助解析传入的字符串,

而电话号码格式为"tel:10086",tel为指定的协议。

<Uri number = Uri.parse("tel:" + mCrime.getPhoneNum());
Intent i = new Intent(Intent.ACTION_DIAL,number);               //创建新的隐式Intent,拨打电话
startActivity(i);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: