欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-12-20 19:03:04
很多人在做手机联系人的apk时会遇到,如何获取手机联系人数据库的问题,在这里我就简单的将代码写一下 package com.example.song.lx_day...

很多人在做手机联系人的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" /> 

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

上一篇:

下一篇: