`
百合不是茶
  • 浏览: 354957 次
社区版块
存档分类
最新评论

读取android系统的联系人拨号

阅读更多

 

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

 

关键代码:

 

 

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();

 

 

 

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

 

 

0
0
分享到:
评论

相关推荐

    Android获取手机通讯录、sim卡联系人及调用拨号界面方法

    在Android平台上,获取手机通讯录和SIM卡联系人,以及调用拨号界面是常见的功能需求,这通常涉及到用户信息的读取和系统的交互。以下将详细解释如何实现这些功能。 首先,要获取手机通讯录的联系人信息,我们需要...

    基于android studio的读取联系人并可点击拨打电话

    这个项目,"基于android studio的读取联系人并可点击拨打电话",显然是一个教学或示例项目,它借鉴了郭霖的畅销书《第一行代码》中的方法。下面将详细讲解如何实现这一功能。 首先,我们需要了解Android的权限管理...

    Android制作拨号键盘

    5. **权限管理**:拨号和读取联系人是敏感操作,需要在AndroidManifest.xml文件中声明相应的权限,如 `&lt;uses-permission android:name="android.permission.CALL_PHONE" /&gt;` 和 `&lt;uses-permission android:name=...

    Android项目联系人,支持拨号。

    3. **访问系统联系人**:在Android中,通过ContentResolver和ContentProvider接口,我们可以读取和操作用户的联系人数据。需要声明`READ_CONTACTS`权限以获取联系人信息,并使用`ContactsContract`类来查询和解析...

    Android电话本和拨号

    在Android系统中,电话本和拨号功能是其核心组件之一,它们允许用户管理联系人信息并方便地进行通话。本文将深入探讨如何在Android应用中实现这些功能,包括获取手机联系人数据、显示联系人列表以及点击拨号的详细...

    android电话拨号器源代码

    5. 联系人集成:拨号器通常会集成到系统联系人应用,以便用户可以快速拨号。这涉及到`ContentProvider`和`CursorLoader`的使用,以读取联系人数据。 6. 事件监听和回调:例如,监听电话状态改变的`...

    android快捷拨号demo

    在Android系统中,快捷拨号功能允许用户快速地拨打常用联系人的电话,无需每次都通过联系人列表进行查找。这个“android快捷拨号demo”很可能是为了演示如何在Android应用中实现这一功能而编写的示例代码。下面我们...

    [Android]电话拨号器

    在Android系统中,电话拨号器是系统服务的一部分,由电信框架提供支持,通常与联系人应用紧密集成。这篇文章将深入探讨电话拨号器的工作原理、涉及的核心组件以及如何进行定制开发。 首先,我们要理解Android的电话...

    Android 多功能拨号盘源码.rar

    6. **SQLite数据库**:如果拨号盘支持联系人存储和查询,那么会用到Android的SQLite数据库。你需要创建数据表,定义数据模型,然后编写CRUD(创建、读取、更新、删除)操作的SQLiteHelper类。 7. **异步操作和线程...

    Android开发实验---通讯录.docx

    2. **UI设计**:考虑用户体验,设计合理的界面布局,如使用ListView或RecyclerView展示联系人列表,提供拨号键盘等。 3. **权限管理**:使用拨打电话和发送短信功能,需要在Manifest.xml中声明相应的权限。 4. **...

    android4.0 联系人源代码

    在Android 4.0(Ice Cream Sandwich,简称ICS)中,联系人应用是系统的核心组件之一,它负责管理和展示用户的联系信息。这个源代码提供了深入理解Android如何处理联系人数据的绝佳机会。以下是对Android 4.0联系人源...

    Android5.0 Dialer拨号盘源码

    在Android系统中,Dialer是用户与手机通信功能交互的核心组件,负责拨打电话、查看联系人以及管理通话记录等功能。Android 5.0(Lollipop)版本对Dialer进行了许多优化,提升了用户体验和性能。本文将深入探讨...

    AndroidStudio安卓课设-简易通讯录

    在主页面上,用户可以进行联系人的增删改查操作,同时还能读取系统的联系人列表以及直接拨打电话。尽管设计较为简单,所有功能都直接在主页面实现,没有进行额外的类封装,但这个项目仍然涵盖了多个关键的Android...

    android 完整的拨号应用源码.rar

    在Android操作系统中,拨号应用是系统核心组件之一,它允许用户拨打电话、查看联系人以及管理通话记录。这份"android 完整的拨号应用源码"提供了深入理解Android拨号器工作原理的机会。源码包含了从界面设计到功能...

    Android下的拨号器

    在拨号器中,可能包含一个用于输入电话号码的EditText,一个拨号按钮,以及可能的其他功能按钮,如最近拨打的联系人列表。 4. **Java源代码**(如`src/com/example/MyDialerApp/*.java`):这些类文件实现了应用的...

    安卓短信彩信相关相关-安卓通信录源码有拨号键盘通信录读取功能还有短信获取.rar

    1. **Android通信录(Contact Manager)**:Android系统提供了丰富的API来访问和操作设备上的联系人数据。这包括`ContactsContract`类,它是Android系统提供的内容提供者,用于存取联系人信息。开发者可以通过...

    Android 多功能拨号盘源码.zip

    6. **联系人集成**:多功能拨号盘可能还包含搜索联系人功能,需要读取Android的联系人数据库,可能使用ContentResolver进行查询操作。 7. **权限管理**:拨号和读取联系人等功能需要相应的Android权限,如`READ_...

Global site tag (gtag.js) - Google Analytics