读取android系统的联系人拨号

Android  /  houtizong 发布于 3年前   87

 

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

 

关键代码:

 

 

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// 监听按下的当点击时,查询出用户的idpublic 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;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.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 blocke.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();//关闭Activitythis.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_URILong 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 参数二:插入一个空的数据返回的idvalues.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();// 联系人idvalues.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();//联系人的idvalues.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();

 

 

 

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

 

 

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客