• android之读取联系人信息


    联系人信息被存放在一个contacts2.db的数据库中

     

    主要的两张表

    读取联系人


     读取联系人需要知道联系人内容提供者的地址,以及对应的操作对象。一般情况下操作对象是的命名方式和表明是一致的。

    布局文件


    在布局文件中定义一个button按钮来获取触发获取联系人信息的事件

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    
        <Button
            android:text="获取联系人信息"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="click"/>
    </LinearLayout>

     Activity


     在Activity中我们创建一个内容访问者来访问联系人应用下的数据(该数据由联系人应用的内容提供者提供)。内容提供者提供了对本地数据库访问的接口,由于联系人的信息由多个表存储,这里主要使用到了两个表。所以至少对数据库做两次查询。

    package xidian.dy.com.chujia;
    
    import android.content.ContentResolver;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    
    
    public class MainActivity extends AppCompatActivity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
    
        public void click(View v){
            ContentResolver cr = getContentResolver();
            Cursor cursorId = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"contact_id"}, null, null, null);
            if(cursorId != null){
                while (cursorId.moveToNext()){
                    String id = cursorId.getString(0);
                    Cursor contact = cr.query(Uri.parse("content://com.android.contacts/data"),new String[]{"data1", "mimetype"},
                            "raw_contact_id=?", new String[]{id}, null);
                    if(contact != null){
                        while (contact.moveToNext()){
                            String name = contact.getString(0);
                            System.out.println(name);
                        }
                        contact.close();
                    }
                }
    
                cursorId.close();
            }
        }
    }

     查询时先查联系人的ID,再通过联系人的ID查看联系人具体信息。

    清单文件


     在清单文件中需要开启访问联系人的权限。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xidian.dy.com.chujia">
        <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="主界面">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    </manifest>

     插入联系人


    在插入联系人时需要操作两张表,一张表是记录联系人ID的,一张表是记录联系人姓名以及联系方式的。

    布局文件


    布局文件中定义一个button组件来触发插入联系人

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    
        <Button
            android:text="插入联系人信息"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="click"/>
    </LinearLayout>

    Activity


    在Activitty中先插入联系人ID,然后插入联系人信息

    package xidian.dy.com.chujia;
    
    import android.content.ContentResolver;
    import android.content.ContentValues;
    import android.database.Cursor;
    import android.net.Uri;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    
    
    public class MainActivity extends AppCompatActivity {
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
        }
    
        public void click(View v){
            ContentResolver cr = getContentResolver();
            ContentValues cv = new ContentValues();
            Cursor cursorId = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"_id"}, null, null, null);
            int contact_id = 1;
            if(cursorId != null && cursorId.moveToLast()){
                int _id = cursorId.getInt(0);
                contact_id = ++ _id;
                cursorId.close();
            }
            //在raw_contacts表中新建一个联系人ID
            cv.put("contact_id", contact_id);
            cr.insert(Uri.parse("content://com.android.contacts/raw_contacts"),cv);
            //往data表中插入联系人姓名
            cv.clear();
            cv.put("data1", "王麻子");
            cv.put("mimetype", "vnd.android.cursor.item/name");
            cv.put("raw_contact_id", contact_id);
            cr.insert(Uri.parse("content://com.android.contacts/data"),cv);
            //往data表中插入联系方式
            cv.clear();
            cv.put("data1", "15993211441");
            cv.put("mimetype", "vnd.android.cursor.item/phone_v2");
            cv.put("raw_contact_id", contact_id);
            cr.insert(Uri.parse("content://com.android.contacts/data"),cv);
        }
    }

    清单文件


    清单文件中需要获取写联系人权限

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="xidian.dy.com.chujia">
        <uses-permission android:name="android.permission.READ_CONTACTS"/>
        <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="主界面">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    </manifest>
  • 相关阅读:
    POJ 1066 Treasure Hunt (线段相交)
    玲珑杯 第4次 String cut(暴力字符串)
    POJ 2653 Pick-up sticks (线段相交)
    HDU 3535 AreYouBusy (混合背包)
    HDU 1712 ACboy needs your help(分组背包)
    HDU 1074 Doing Homework (状压dp)
    POJ 1635 Subway tree systems (树的最小表示法)
    HDU 汉诺塔系列
    HYSBZ 1500 维修数列(伸展树模板)
    photoshop 快速切图
  • 原文地址:https://www.cnblogs.com/xidongyu/p/5774806.html
Copyright © 2020-2023  润新知