• Android开发之读写联系人


    读写联系人需要用到android的ContentProvider

    同时需要读和写联系人的权限

    需要使用到联系人数据库中的

    * raw_contacts表:
    * contact_id:联系人id


    * data表:联系人的具体信息,一个信息占一行
    * data1:信息的具体内容
    * raw_contact_id:联系人id,描述信息属于哪个联系人
    * mimetype_id:描述信息是属于什么类型


    * mimetypes表:通过mimetype_id到该表查看具体类型

     1 import android.app.Activity;
     2 import android.content.ContentResolver;
     3 import android.content.ContentValues;
     4 import android.database.Cursor;
     5 import android.net.Uri;
     6 import android.os.Bundle;
     7 import android.view.Menu;
     8 import android.view.MenuItem;
     9 import android.view.View;
    10 
    11 /*
    12  * 读写联系人,通过系统提供的ContentProvider实现。需要读和写联系人的权限
    13  * 需要使用raw_contacts表、data表、mimetypes表
    14  */
    15 public class MainActivity extends Activity {
    16 
    17     private ContactBean contactBean;
    18 
    19     @Override
    20     protected void onCreate(Bundle savedInstanceState) {
    21         super.onCreate(savedInstanceState);
    22         setContentView(R.layout.activity_main);
    23         contactBean = new ContactBean();
    24     }
    25     //获取手机通讯录中的联系人信息
    26     public void click(View v) {
    27         ContentResolver cr = getContentResolver();
    28         //获取到raw_contacts表中的contact_id字段
    29         Cursor cursorContactId = cr.query(
    30                 Uri.parse("content://com.android.contacts/raw_contacts"),
    31                 new String[] { "contact_id" }, null, null, null);
    32         if (cursorContactId != null) {
    33             while (cursorContactId.moveToNext()) {
    34                 String contact_id = cursorContactId.getString(cursorContactId
    35                         .getColumnIndex("contact_id"));
    36                 //通过获取到的contact_id,在data表中查询具体的联系人名称,电话,email等信息。
    37                 Cursor cursor2 = cr.query(
    38                         Uri.parse("content://com.android.contacts/data"),
    39                         new String[] { "data1", "mimetype" },
    40                         "raw_contact_id=?", new String[] { contact_id }, null);
    41                 if (cursor2 != null) {
    42                     while (cursor2.moveToNext()) {
    43                         String data1 = cursor2.getString(cursor2
    44                                 .getColumnIndex("data1"));
    45                         String mimetype = cursor2.getString(cursor2
    46                                 .getColumnIndex("mimetype"));
    47                         //通过mimetypes表中字段比较,获取到联系人的email信息
    48                         if ("vnd.android.cursor.item/email_v2".equals(mimetype)) {
    49                             contactBean.setEmail(data1);
    50                         //通过mimetypes表中字段比较,获取到联系人的name信息
    51                         } else if ("vnd.android.cursor.item/name"
    52                                 .equals(mimetype)) {
    53                             contactBean.setName(data1);
    54                         //通过mimetypes表中字段比较,获取到联系人的phone信息
    55                         } else if ("vnd.android.cursor.item/phone_v2"
    56                                 .equals(mimetype)) {
    57                             contactBean.setPhone(data1);
    58                         }
    59                     }
    60                     System.out.println(contactBean.toString());
    61                 }
    62             }
    63         }
    64     }
    65     //插入数据到手机通讯录
    66     public void insertContact(View v){
    67         ContentResolver cr = getContentResolver();
    68         //通过字段_id在raw_contacts表中查询目前通讯录含有多少条联系人,然后在已有的联系人数目上+1就是要插入联系人的_id.
    69         Cursor cursor=cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"_id"}, null, null, null);
    70         int num=1;
    71         if (cursor.moveToLast()) {
    72             int id=cursor.getColumnIndex("_id");
    73             num=id+1;
    74         }
    75         ContentValues values = new ContentValues();
    76         values.put("contact_id", num);
    77         cr.insert(Uri.parse("content://com.android.contacts/raw_contacts"), values);
    78         values.clear();
    79         values.put("data1", "二五");
    80         values.put("mimetype", "vnd.android.cursor.item/name");
    81         values.put("raw_contact_id", num);
    82         cr.insert(Uri.parse("content://com.android.contacts/data"), values);
    83         values.clear();
    84         values.put("data1", "12345678901");
    85         values.put("mimetype", "vnd.android.cursor.item/phone_v2");
    86         values.put("raw_contact_id", num);
    87         cr.insert(Uri.parse("content://com.android.contacts/data"), values);
    88         values.clear();
    89         values.put("data1", "1234@haha.com");
    90         values.put("mimetype", "vnd.android.cursor.item/email_v2");
    91         values.put("raw_contact_id", num);
    92         cr.insert(Uri.parse("content://com.android.contacts/data"), values);
    93     }
    94 
    95 }
  • 相关阅读:
    论文解析 -- TiDB: A Raftbased HTAP Database
    人生资产负债表
    Hadoop、Hive、Spark 之间关系
    在 Python3 中,bytes 和 str 的互相转换方式是
    json中load和loads区别
    springboot——修改html实时生效,不用重启tomca(idea版)
    ThinkPHP6 利用crontab+think make:command执行定时任务 tp6默认不可以用命令行访问控制器
    Whoops, GitLab is taking too much time to respond.解决
    phpmyadmin导入csv文件 #1366
    pipenv --python 'python/path' install 报错原因
  • 原文地址:https://www.cnblogs.com/liyiran/p/5104504.html
Copyright © 2020-2023  润新知