zoukankan      html  css  js  c++  java
  • 009_02访问系统联系人数据库

     系统联系人contacts2.db存放位置:

    MIMETYPE对应表

    导出Contacts2.db使用SQLite Expert打开,选择data表:

    其实上两张表是不同的。第二张表是在模拟器通讯录中删除了Woodrow联系人之后的,可以看到导出的表关于Woodrow的数据依然存在。

    再来看看raw_contacts表删除Woodrow联系人之前和之后的情况:

    可以发现contact_id为3的被置为null,所以手机中删除联系人并没有真正删除。

    MainActivity.java

     1 package com.example.visit_contacts;
     2 
     3 import android.app.Activity;
     4 import android.content.ContentResolver;
     5 import android.content.ContentValues;
     6 import android.database.Cursor;
     7 import android.net.Uri;
     8 import android.os.Bundle;
     9 import android.util.Log;
    10 import android.view.Menu;
    11 import android.view.MenuItem;
    12 import android.view.View;
    13 
    14 public class MainActivity extends Activity {
    15 
    16     @Override
    17     protected void onCreate(Bundle savedInstanceState) {
    18         super.onCreate(savedInstanceState);
    19         setContentView(R.layout.activity_main);
    20     }
    21     public void getContact(View v){
    22         ContentResolver cr = getContentResolver();
    23         Cursor c = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"contact_id"}, null, null, null);
    24         while(c.moveToNext()){
    25             int id = c.getInt(0);
    26             Cursor c2 = cr.query(Uri.parse("content://com.android.contacts/data"), new String[]{"mimetype","data1"}, 
    27                     "raw_contact_id=?", new String[]{id+""}, null);
    28             Contact contact = new Contact();
    29             while(c2.moveToNext()){
    30                 String type = c2.getString(0);
    31                 String data1 = c2.getString(1);
    32                 if("vnd.android.cursor.item/name".equals(type)){
    33                     contact.setName(data1);
    34                 }
    35                 if("vnd.android.cursor.item/phone_v2".equals(type)){
    36                     contact.setNumber(data1);
    37                 }
    38                 if("vnd.android.cursor.item/email_v2".equals(type)){
    39                     contact.setEmail(data1);
    40                 }
    41                 Log.i("getContact", contact.toString());
    42                 }
    43             }
    44     }
    45     
    46     public void addContact(View v){
    47         ContentResolver cr = getContentResolver();
    48         //step1:handle raw_contact table;
    49         Cursor c = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"_id"}, null, null, null);
    50         c.moveToLast();
    51         int id = c.getInt(0);
    52         int insert_id = id + 1;
    53         
    54         ContentValues cv = new ContentValues();
    55         cv.put("_id", insert_id);
    56         cv.put("contact_id", insert_id);
    57         cr.insert(Uri.parse("content://com.android.contacts/raw_contacts"), cv);
    58         
    59          //step2. handle data table
    60          //insert name 
    61          cv.clear();
    62          cv.put("_id", 9);
    63          cv.put("mimetype", "vnd.android.cursor.item/name");
    64          cv.put("raw_contact_id", insert_id);
    65          cv.put("data1", "zhangsanfeng");
    66          cr.insert(Uri.parse("content://com.android.contacts/data"), cv);
    67          
    68          //insert  phone_v2
    69          cv.clear();
    70          cv.put("_id", 10);
    71          cv.put("mimetype", "vnd.android.cursor.item/phone_v2");
    72          cv.put("raw_contact_id", insert_id);
    73          cv.put("data1", "13899998888");         
    74          cr.insert(Uri.parse("content://com.android.contacts/data"), cv);
    75          
    76          //insert email 
    77          cv.clear();
    78          cv.put("_id", 11);
    79          cv.put("mimetype", "vnd.android.cursor.item/email_v2");
    80          cv.put("raw_contact_id", insert_id);
    81          cv.put("data1", "zsf@163.com");
    82          cr.insert(Uri.parse("content://com.android.contacts/data"), cv);
    83     }
    84         
    85 
    86 }
    87 

    Contact.java

     1 package com.example.visit_contacts;
     2 
     3 public class Contact {
     4 
     5      private String name;
     6      private String number;
     7      private String email;
     8     public String getName() {
     9         return name;
    10     }
    11     public void setName(String name) {
    12         this.name = name;
    13     }
    14     public String getNumber() {
    15         return number;
    16     }
    17     public void setNumber(String number) {
    18         this.number = number;
    19     }
    20     public String getEmail() {
    21         return email;
    22     }
    23     public void setEmail(String email) {
    24         this.email = email;
    25     }
    26     public Contact(String name, String number, String email) {
    27         super();
    28         this.name = name;
    29         this.number = number;
    30         this.email = email;
    31     }
    32     public Contact() {
    33         super();
    34         // TODO Auto-generated constructor stub
    35     }
    36     @Override
    37     public String toString() {
    38         return "Contact [name=" + name + ", number=" + number + ", email="
    39                 + email + "]";
    40     }
    41      
    42 
    43 }
    44 
    activity_main.xml
     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:paddingBottom="@dimen/activity_vertical_margin"
     6     android:paddingLeft="@dimen/activity_horizontal_margin"
     7     android:paddingRight="@dimen/activity_horizontal_margin"
     8     android:paddingTop="@dimen/activity_vertical_margin"
     9     tools:context="com.example.visit_contacts.MainActivity"
    10     android:orientation="vertical" >
    11 
    12     <TextView
    13         android:layout_width="wrap_content"
    14         android:layout_height="wrap_content"
    15         android:text="@string/hello_world" />
    16     
    17      <Button
    18         android:layout_width="wrap_content"
    19         android:layout_height="wrap_content"
    20         android:onClick="getContact"
    21         android:text="获取系统的联系人信息" />
    22       <Button
    23         android:layout_width="wrap_content"
    24         android:layout_height="wrap_content"
    25         android:text="新增系统的联系人信息" 
    26         android:onClick="addContact"
    27         />
    28 
    29 </LinearLayout>
    30 
    物随心转,境由心造,一切烦恼皆由心生。
  • 相关阅读:
    A1126 Eulerian Path (25分)
    A1125 Chain the Ropes (25分)
    A1124 Raffle for Weibo Followers (20分)
    A1123 Is It a Complete AVL Tree (30分)
    A1122 Hamiltonian Cycle (25分)
    A1121 Damn Single (25分)
    A1120 Friend Numbers (20分)
    A1119 Pre- and Post-order Traversals (30分)
    总的调试开关
    sourceInsight
  • 原文地址:https://www.cnblogs.com/woodrow2015/p/4513189.html
Copyright © 2011-2022 走看看