当前位置: 移动技术网 > 移动技术>移动开发>Android > android如何获取手机联系人的数据库示例代码

android如何获取手机联系人的数据库示例代码

2019年07月24日  | 移动技术网移动技术  | 我要评论

很多人在做手机联系人的apk时会遇到,如何获取手机联系人数据库的问题,在这里我就简单的将代码写一下

package com.example.song.lx_day14_contacts; 
 
import android.content.contentresolver; 
import android.database.cursor; 
import android.net.uri; 
import android.os.bundle; 
import android.support.v7.app.appcompatactivity; 
import android.widget.listview; 
import android.widget.simpleadapter; 
import android.widget.textview; 
 
import java.util.arraylist; 
import java.util.hashmap; 
import java.util.list; 
import java.util.map; 
 
/** 
 * 获取手机通讯录信息 展示并且修改 
 * listview 
 * simpleadapter 
 * list<map<string,string>> 
 */ 
public class mainactivity extends appcompatactivity { 
  private string uri_raw = "content://com.android.contacts/raw_contacts"; 
  //直接获取data表中的 数据类型是phone 
  private string uri_phone = "content://com.android.contacts/data/phones"; 
  //直接获取data表中数据类型是emali 
  private string uri_emalis = "content://com.android.contacts/data/emails"; 
  private string uri_data = "content://com.android.contacts/data"; 
  private listview listview; 
  private textview empty; 
  private simpleadapter adapter; 
  private list<map<string, string>> data = new arraylist<>(); 
  private contentresolver contentresolver;//用来访问数据 
 
  @override 
  protected void oncreate(bundle savedinstancestate) { 
    super.oncreate(savedinstancestate); 
    setcontentview(r.layout.activity_main); 
    listview = ((listview) findviewbyid(r.id.lv)); 
    empty = ((textview) findviewbyid(r.id.empty)); 
    listview.setemptyview(empty);//设置空视图 
    adapter = new simpleadapter(this, data, r.layout.item, new string[]{"_id", "display_name", "data1"}, new int[]{r.id.id, r.id.name, r.id.number}); 
    listview.setadapter(adapter); 
    contentresolver = getcontentresolver(); 
    reloadlistview(); 
  } 
 
  private void reloadlistview() { 
    data.clear(); 
    data.addall(selectdata()); 
    adapter.notifydatasetchanged(); 
 
  } 
 
  //查询工作 用于查询data raw_contact标 返回list数据 在刷新adapter 
  private list<map<string, string>> selectdata() { 
    /** 
     * 1.先查询raw 获取_id查出所有联系人 
     * 2.循环查询-->根据_id去data表中(_id=raw_contacts_id)查询 data1数据 
     */ 
    cursor cursor = contentresolver.query(uri.parse(uri_raw), new string[]{"_id", "display_name"}, null, null, null); 
    //cursor返回的cursor数量不定 
    list<map<string, string>> list = new arraylist<>(); 
    while (cursor != null && cursor.movetonext()) { 
      string _id = cursor.getstring(0); 
      string displayname = cursor.getstring(1); 
      map<string, string> map = new hashmap<>(); 
      map.put("_id", _id); 
      map.put("display_name", displayname); 
      //根据_id 去data查手机号 
      cursor cursor1 = contentresolver.query(uri.parse(uri_phone), new string[]{"data1"}, "raw_contact_id=?", new string[]{_id}, null); 
      //循环拿到手机号 
      stringbuffer sb = new stringbuffer(); 
      //这里循环拿到手机号是因为有时联系人中 你可能一个人有几个电话 
      while (cursor1 != null && cursor1.movetonext()) { 
        sb.append(cursor1.getstring(0) + "\n"); 
      } 
      cursor1.close(); 
      map.put("data1", sb.tostring()); 
      list.add(map); 
    } 
    cursor.close(); 
    return list; 
  } 
} 

在这里不要忘记了添加权限

<uses-permission android:name="android.permission.read_contacts" /> 
<uses-permission android:name="android.permission.write_contacts" /> 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网