当前位置:首页 > 开发 > 移动开发 > 正文

读取android系统的联系人拨号

发表于: 2015-03-02   作者:百合不是茶   来源:转载   浏览:
摘要:        联系人的姓名和号码是保存在不同的表中,不要一下子把号码查询来,我开始就是把姓名和电话同时查询出来的,导致系统非常的慢   关键代码:     1, 使用javabean操作存储读取到的数据 package com.example.bean; /** * * @author Admini

 

     联系人的姓名和号码是保存在不同的表中,不要一下子把号码查询来,我开始就是把姓名和电话同时查询出来的,导致系统非常的慢

 

关键代码:

 

 

1, 使用javabean操作存储读取到的数据

package com.example.bean;

/**
 * 
 * @author Administrator 联系人的个人信息
 */
public class OneUser {

	private String id;
	private String username;
	private String userphone;
	private String useremail;
	private String userbmp;

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getUserphone() {
		return userphone;
	}

	public void setUserphone(String userphone) {
		this.userphone = userphone;
	}

	public String getUseremail() {
		return useremail;
	}

	public void setUseremail(String useremail) {
		this.useremail = useremail;
	}

	public String getUserbmp() {
		return userbmp;
	}

	public void setUserbmp(String userbmp) {
		this.userbmp = userbmp;
	}
}

 

 

 

2, 查询用户的id和姓名  

 

		// 参数一:uridate表示查询的数据uri projection是我们要查询的列;    table是根据Uri确定的数据库表;
			//   
			// selection使我们自己的查询条件;    order是我们想要的排序方式。
			// RawContacts.CONTENT_URI读取表的所有的姓名
			Cursor cursor = fragmentActivity.getContentResolver().query(
					ContactsContract.Contacts.CONTENT_URI, null, null, null,
					ContactsContract.Data.SORT_KEY_PRIMARY);// ContactsContract.Contacts.DISPLAY_NAME
			// +"ASC"

			while (cursor.moveToNext()) {
				OneUser user = new OneUser();
				// 查询id和名字
				user.setId(cursor.getString(cursor
					.getColumnIndex(ContactsContract.Contacts._ID)));
	                       user.setUsername(cursor.getString(cursor
			     .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
	               mItems.add(user);使用队列存放

				   
			}
			cursor.close();//关闭游标

 

 

 

3,用户点击时,查询点击的号码

@Override
	// 监听按下的当点击时,查询出用户的id
	public void onItemClick(AdapterView<?> parent, View view, int position,
			long id) {
		Toast.makeText(fragmentActivity, "position:" +"view:"+view+ position + "id:" + id,
				Toast.LENGTH_SHORT).show();
		//根据队列中的存放的id查询用户的电话
		OneUser oneUser=mItems.get(position);
		//获取联系人表中的提供者,根据id查询
		 Cursor phones = fragmentActivity.getContentResolver().query(
		 ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
		 null,
		 ContactsContract.CommonDataKinds.Phone.CONTACT_ID
		 + " =" + oneUser.getId(), null, null);
		 // 指向phones的下一条数据
		 if(phones.moveToFirst()) {
		 // 查询数据号码
		  userphone = phones
		 .getString(phones
		 .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
		  System.out.println("userphone:"+userphone);
		 }
		 phones.close();

 

 

 

 

 

4, 添加联系人  姓名,号码,邮箱

/**
 * 
 * @author Administrator 添加联系人
 */
public class AddActivity extends Activity {

	private EditText useremails;
	private EditText usernames;
	private EditText userphones;
	private ImageView userbmp;
	private String username;
	private String userphone;
	private String useremail;
	private ContentResolver resolver;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.addcontact);
		// 获得姓名 ,号码,邮箱,图片
		usernames = (EditText) this.findViewById(R.id.username);
		userphones = (EditText) this.findViewById(R.id.userphone);
		useremails = (EditText) this.findViewById(R.id.useremail);
		userbmp = (ImageView) this.findViewById(R.id.bmp);
		try {
			//读取Assets文件下的资源图片,必须使用流进行读取
			InputStream is = this.getResources().getAssets().open("img_1.jpg");
			//根据读取的长度创建字节数据
			byte[] data = new byte[is.available()];
			//读取字节
			is.read(data);
			// 获得bmp图片工厂
			Bitmap bmp = BitmapFactory.decodeByteArray(data, 0, data.length);
			//设置如片
			userbmp.setImageBitmap(bmp);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	// Animation a = AnimationUtils.loadAnimation(this, R.anim.snap_bottom_in);
	// //从底端弹出动画
	// Animation b = AnimationUtils.loadAnimation(this,
	// R.anim.snap_bottom_out);//从底端消失动画
	// menu.startAnimation(a);//弹出菜单
	// menu.startAnimation(b);//取消菜单
	// 按钮监听器
	public void click(View v) {
		switch (v.getId()) {
		case R.id.cancel:// 取消
			finish();//关闭Activity
			this.overridePendingTransition(R.anim.activity_close, 0);//设置关闭动画
			break;

		case R.id.confirm:// 确定
             //读取姓名,号码,邮箱
			username = usernames.getText().toString().trim();
			userphone = userphones.getText().toString().trim();
			useremail = useremails.getText().toString().trim();

			// 获得内容提供者
			resolver = this.getContentResolver();
			// 通过Uri访问
			// Uri uri = Uri.parse("content://com.MyContent.provider/user");
			// 将数据封装成ContentValues对象
			ContentValues values = new ContentValues();
			// 使用内容提供者插入数据
			// 参数一:内容提供者的路径
			// 参数二:插入的数据 k:字段名 v:k键的数据
			Uri rawContactsUri = resolver.insert(RawContacts.CONTENT_URI,
					values);
			// 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId
			// 这时后面插入data表的依据,只有执行空值插入,才能使插入的联系人在通讯录里面可见
			// URI:RawContacts.CONTENT_URI
			Long contentId = ContentUris.parseId(rawContactsUri);
			// 插入姓名
			DataInsert(contentId, values);
			
			break;
		}
	}
     // 插入姓名,电话,邮箱 的方法
	public void DataInsert(Long contentId, ContentValues values) {
		// 通过得到的id 将姓名,电话,邮箱 插入到系统表中
		// android.provider.ContactsContract.Data.CONTENT_URI
		// 姓名;
		values.clear();
		// 参数一: 数据要插入的id 参数二:插入一个空的数据返回的id
		values.put(Data.RAW_CONTACT_ID, contentId);
		// 参数一:数据类型 参数二;数据类型的值
		values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
		// 参数一:名字 参数二;名字:名字
		values.put(StructuredName.GIVEN_NAME, username);
        //插入姓名
		Uri uri = resolver.insert(ContactsContract.Data.CONTENT_URI, values);
		if (uri != null) {
			Toast.makeText(this, "添加成功..", Toast.LENGTH_SHORT).show();
			// 姓名插入成功就查电话号码;
			// 清除values的数据
			values.clear();
			// 联系人id
			values.put(Data.RAW_CONTACT_ID, contentId);
			// 数据类型
			values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
			// 电话号码
			values.put(Phone.NUMBER, userphone);
			// 电话号码的类型
			values.put(Phone.TYPE, Phone.TYPE_MOBILE);
			//插入号码
			uri = resolver.insert(ContactsContract.Data.CONTENT_URI, values);
			if (uri != null) {
				if ("".equals(useremail)) {
					Toast.makeText(this, "添加成功..", Toast.LENGTH_SHORT).show();
					finish();
					this.overridePendingTransition(R.anim.activity_close, 0);
				} else {
					//清除
					values.clear();
					//联系人的id
					values.put(Data.RAW_CONTACT_ID, contentId);
					//数据类型是邮箱
					values.put(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE);
					//邮箱
					values.put(Email.DATA,useremail );
					//邮箱数据类型
					values.put(Email.TYPE, Email.TYPE_WORK);
					//插入邮箱
					uri=resolver.insert(ContactsContract.Data.CONTENT_URI, values);
					if(uri!=null){
						Toast.makeText(this, "添加成功..", Toast.LENGTH_SHORT).show();
						finish();
						this.overridePendingTransition(R.anim.activity_close, 0);
					}else{
						Toast.makeText(this, "添加失败..邮箱", Toast.LENGTH_SHORT).show();
					}
					
				}

			} else {
				Toast.makeText(this, "添加失败..电话", Toast.LENGTH_SHORT).show();
			}

		} else {
			Toast.makeText(this, "添加失败..姓名", Toast.LENGTH_SHORT).show();
		}

	}

 

   

 

读取联系人的号码的步骤;先读取联系人的id和姓名,根据id读取号码,添加联系人  这些操作的前提是都要先获取内容提供者

 

  读取id和号码是在Fargment中操作的需要使用Fragment获取Activity 

  

// 在Fragment中使用ArrayAdapter适配器 必须得到Fragment的Activity

private FragmentActivity fragmentActivity; = getActivity();  

 

//内容提供者

              fragmentActivity.getContentResolver().query();

 

 

 

    后面将介绍读取联系人的通话记录操作

 

 

读取android系统的联系人拨号

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
使用 ContentProvider共享数据: 当应用继承 ContentProvider 类,并重写该类用于提供数据和存储数
内容提供器的用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序中的数据,另一种是
Introduction To Android Contacts Learn to work with the Android contacts database. Basic know
Introduction To Android Contacts Learn to work with the Android contacts database. Basic know
Introduction To Android Contacts Learn to work with the Android contacts database. Basic know
Introduction To Android Contacts Learn to work with the Android contacts database. Basic know
Android Contacts(一)—— 读取联系人 分类: Android 2012-03-07 14:01 3509人阅读 评论(0) 收藏
Introduction To Android Contacts Learn to work with the Android contacts database. Basic know
转自http://www.cnblogs.com/error404/archive/2013/03/12/2956090.html 在android中读取联系人信息
1:androidmanifest.xml的内容 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号