一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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

时间:2017-03-07 编辑:简简单单 来源:一聚教程网

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

 代码如下 复制代码

packagecom.example.song.lx_day14_contacts;

  

importandroid.content.ContentResolver;

importandroid.database.Cursor;

importandroid.net.Uri;

importandroid.os.Bundle;

importandroid.support.v7.app.AppCompatActivity;

importandroid.widget.ListView;

importandroid.widget.SimpleAdapter;

importandroid.widget.TextView;

  

importjava.util.ArrayList;

importjava.util.HashMap;

importjava.util.List;

importjava.util.Map;

  

/**

 * 获取手机通讯录信息 展示并且修改

 * listview

 * simpleadapter

 * list>

 */

publicclassMainActivityextendsAppCompatActivity {

  privateString uri_raw ="content://com.android.contacts/raw_contacts";

  //直接获取data表中的 数据类型是phone

  privateString uri_phone ="content://com.android.contacts/data/phones";

  //直接获取data表中数据类型是emali

  privateString uri_emalis ="content://com.android.contacts/data/emails";

  privateString uri_data ="content://com.android.contacts/data";

  privateListView listView;

  privateTextView empty;

  privateSimpleAdapter adapter;

  privateList> data =newArrayList<>();

  privateContentResolver contentResolver;//用来访问数据

  

  @Override

  protectedvoidonCreate(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 =newSimpleAdapter(this, data, R.layout.item,newString[]{"_id","display_Name","data1"},newint[]{R.id.id, R.id.name, R.id.number});

    listView.setAdapter(adapter);

    contentResolver = getContentResolver();

    reloadListView();

  }

  

  privatevoidreloadListView() {

    data.clear();

    data.addAll(selectData());

    adapter.notifyDataSetChanged();

  

  }

  

  //查询工作 用于查询data raw_contact标 返回list数据 在刷新adapter

  privateList> selectData() {

    /**

     * 1.先查询raw 获取_id查出所有联系人

     * 2.循环查询-->根据_id去data表中(_id=raw_contacts_id)查询 data1数据

     */

    Cursor cursor = contentResolver.query(Uri.parse(uri_raw),newString[]{"_id","display_name"},null,null,null);

    //cursor返回的cursor数量不定

    List> list =newArrayList<>();

    while(cursor !=null&& cursor.moveToNext()) {

      String _id = cursor.getString(0);

      String displayName = cursor.getString(1);

      Map map =newHashMap<>();

      map.put("_id", _id);

      map.put("display_Name", displayName);

      //根据_id 去data查手机号

      Cursor cursor1 = contentResolver.query(Uri.parse(uri_phone),newString[]{"data1"},"raw_contact_id=?",newString[]{_id},null);

      //循环拿到手机号

      StringBuffer sb =newStringBuffer();

      //这里循环拿到手机号是因为有时联系人中 你可能一个人有几个电话

      while(cursor1 !=null&& cursor1.moveToNext()) {

        sb.append(cursor1.getString(0) +"\n");

      }

      cursor1.close();

      map.put("data1", sb.toString());

      list.add(map);

    }

    cursor.close();

    returnlist;

  }

}

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

 代码如下 复制代码

热门栏目