Android 调用系统通讯录
这个过程有三步:
1)许可向你的应用程序的manifest中添加读取通讯录数据的许可
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
2)调用Contact Picker
在你的activity中,创建一个Intent,用来请求系统查找一个能够执行一个从Contacts URI的项目中发出的PICK动作的activity,
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
调用startActivityForResult在Intent中传递(和一个整数的请求代码,在这个例子中是PICK CONTACT )。这将导致android启动一个已经被等级的activity,用来支持在People.CONTENT URI上的ACTION_PICK ,然后当按下选择(或者取消)的时候返回到这个activity。startActivityForResult(intent, PICK_CONTACT);
3)仍然在你的activity中,重写onActivityResul方法来监听在你的第二个步骤中启动的activi'select a contact' activity的回调。你应该检查反馈的请求代码是否匹配你的期望值,结果代码是否是 RESULT_OK。
通过在数据Intent参数中调用getData()你可以获得选择的联系人的URI。为了获得选择的联系人的名字你需要使用URI从返回的游标中创建一个新的查询和提取的参数。
@Overridepublic void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
switch (reqCode) {
case (PICK_CONTACT) :
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.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));}}break;}}
然后是例子奉上:
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.EditText; public class MainActivity extends Activity { EditText text;
String username,usernumber; @Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = (EditText)findViewById(R.id.number);
} public void click(View v){
startActivityForResult(new Intent(
Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI), 0);
} @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
ContentResolver reContentResolverol = getContentResolver();
Uri contactData = data.getData();
@SuppressWarnings("deprecation")
Cursor cursor = managedQuery(contactData, null, null, null, null);
cursor.moveToFirst();
username = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
Cursor phone = reContentResolverol.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId,
null,
null);
while (phone.moveToNext()) {
usernumber = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
text.setText(usernumber+" ("+username+")");
} }
}
}
简洁的?
private static final int REQUEST_CONTACT = 1; private void startContact() { Intent intent = new Intent(); intent.setAction(Intent.ACTION_PICK); intent.setData(ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent, REQUEST_CONTACT); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CONTACT) { if (resultCode == RESULT_OK) { if (data == null) { return; } Uri result = data.getData(); contactId = result.getLastPathSegment(); contactName = getPhoneContacts(contactId); } }
Android 调用系统通讯录的更多相关文章
- Android调用系统相册和拍照的Demo
最近我在群里看到有好几个人在交流说现在网上的一些Android调用系统相册和拍照的demo都有bug,有问题,没有一个完整的.确实是,我记得一个月前,我一同学也遇到了这样的问题,在低版本的系统中没问题 ...
- iOS调用系统通讯录获取姓名电话号码(转)
原文地址:http://blog.csdn.net/idoshi201109/article/details/46007125 OS调用系统通讯录获取姓名电话号码 (iOS 8.0 Xcode6.3可 ...
- Android调用系统相机、自己定义相机、处理大图片
Android调用系统相机和自己定义相机实例 本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,而且因为涉及到要把拍到的照片显示出来,该样例也会涉及到Android载入大图片时候的处 ...
- Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例 本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显示出来,该例子也会涉及到Android加载大图片时候的处理 ...
- Android 调用系统分享文字、图片、文件,可直达微信、朋友圈、QQ、QQ空间、微博
原文:Android 调用系统分享文字.图片.文件,可直达微信.朋友圈.QQ.QQ空间.微博 兼容SDK 18以上的系统,直接调用系统分享功能,分享文本.图片.文件到第三方APP,如:微信.QQ.微博 ...
- Android调用系统照相机
ndroid调用系统相机实现拍照功能 在实现拍照的功能时遇到了很多问题,搜索了很多资料,尝试了很多办法,终于解决了,下面简要的描述下在开发过程中遇到的问题. 虽然之前看过android开发的书,但是没 ...
- android调用系统相机并获取图片
如果不是特别的要求,通过拍照的方式取得图片的话,我们一般调用系统的拍照来完成这项工作,而没必要再自己去实现一个拍照功能.调用系统相机很简单,只需要一个intent就可以跳转到相几界面,然后再通过onA ...
- Android 调用系统照相机拍照和录像
本文实现android系统照相机的调用来拍照 项目的布局相当简单,只有一个Button: <RelativeLayout xmlns:android="http://schemas.a ...
- (转)Android调用系统自带的文件管理器进行文件选择并获得路径
Android区别于iOS的沙盒模式,可以通过文件浏览器浏览本地的存储器.Android API也提供了相应的接口. 基本思路,先通过Android API调用系统自带的文件浏览器选取文件获得URI, ...
随机推荐
- 引用枚举进行对比时 enum需强制转换
枚举类 public enum MailRead { /// <summary> /// 未读 /// </summary> UNREAD=0, /// <summary ...
- input的样式简介
<input type="text" autocomplete="off" placeholder="" x-webkit-speec ...
- Genymotion error:The virtual device got no IP address
控制面板,网络和intent,网络和共享中心,更改适配器设置,看下你的VirtualBox Host-Only Ethernet Adapter这个显卡 启动了没有, 没有就启动它!!!
- Inno Setup打包的程序提升为管理员权限
Inno Setup打包的程序在Win7 64位系统上安装,安装步骤最后一步若选中运行程序,会跳出一个错误提示框. 这是因为64位win7系统运行程序时需要管理员权限,而打包的文件并没有这个权限就试图 ...
- Web页面在手机上显示过大问题
网上抄来了,自己也备忘下:增加<meta name="viewport" content="width=device-width, initial-scale=1. ...
- jquery学习笔记之二
1.one()与bind()的区别 bind():给一个对象绑定事件,可以绑定一个事件,也可以绑定多个事件. one():跟bind一样,都是给对象绑定事件的. 如给一个按钮绑定了三个相同的click ...
- 关于Git和Github
英文原文:Ten Things You Didn't Know Git And GitHub Could Do Git 和 GitHub 都是非常强大的工具.即使你已经使用他们很长时间,你也很有可能不 ...
- requireJS到底是什么?
1.requireJS是让js代码模块化:而且js之间的依赖关系,不再依靠script标签的顺序,可以加载不阻塞 2.requireJS加载js的方法:<script data-main=&qu ...
- 预定义变量 - PHP手册笔记
预定义变量将所有的外部变量表示成内建环境变量,并且将错误信息表示成返回头.超全局变量是在全部作用域中始终可用的内置变量.在函数或方法中无需执行global $variable,就可以访问它们. $GO ...
- 自制DTU
最近打算自己做一款工业级DTU产品,预计到今年年底前完成,博客会随时更新产品进度,有兴趣的朋友可以联系我.