内容提供者(获取联系人信息和插入联系人)

一丶获取联系人的信息

点击获取联系人信息

public void click(View view){
        //获取内容解析器
        ContentResolver resolver = getContentResolver() ;
        //设定访问的uri(系统本机)
        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts") ;//联系人的id
        Uri datauri = Uri.parse("content://com.android.contacts/data") ;//联系人信息
        //查询所有联系人的id
        Cursor idCursor = resolver.query(uri, new String[]{"contact_id"}, null, null, null) ;
        while(idCursor.moveToNext()){
            String id = idCursor.getString(0) ;
            //根据id去data表中查询数据
            //注意:查询数据的时候其实是查询的是一个视图,在视图中将字段mimetype_id改成了mimetype, 在查询的时候注意改过来
            Cursor datacurcor = resolver.query(datauri, new String[]{"mimetype","data1"}, "raw_contact_id=?", new String[]{id}, null) ;
            Contact c = new Contact() ;//声明并实例化一个联系人信息对象
            while(datacurcor.moveToNext()){
                String type = datacurcor.getString(0) ;
                String data = datacurcor.getString(1) ;
                        
                //根据mimetype的值来封装联系人具体的信息
                if("vnd.android.cursor.item/email_v2".equals(type))
                    c.setEmail(data) ;
                if("vnd.android.cursor.item/im".equals(type))
                    c.setQq(data) ;
                if("vnd.android.cursor.item/phone_v2".equals(type))
                    c.setPhone(data) ;
                if("vnd.android.cursor.item/name".equals(type))
                    c.setName(data) ;
                if("vnd.android.cursor.item/postal-address_v2".equals(type))
                    c.setAddress(data) ;
            }
            datacurcor.close() ;
            list.add(c) ;
        }
        idCursor.close() ;
        //数据封装完毕

//显示到listView中

lv.setAdapter(new Myadapter()) ;
    }   
    private class Myadapter extends BaseAdapter{

@Override
        public int getCount() {
            return list.size();
        }

@Override
        public Object getItem(int position) {
            return null;
        }

@Override
        public long getItemId(int position) {
            return 0;
        }

@Override
        public View getView(int position, View convertView, ViewGroup parent) {
            TextView tv = null ;
            if(convertView == null)
                tv = new TextView(MainActivity.this) ;
            else
                tv = (TextView) convertView ;
            
            tv.setTextSize(15) ;
            StringBuilder sb = new StringBuilder() ;
            Contact c = list.get(position) ;
            sb.append("姓名:" + c.getName() + " 电话:" + c.getPhone() + " 地址:" + c.getAddress() + " 邮箱:" + c.getEmail() + " QQ:" + c.getQq()) ;
            tv.setText(sb.toString()) ;
            return tv;
        }
    }

注意:要在清单文件里面读取联系人权限配置权限

二丶插入一条联系人信息

public void click(View view) {
        // 拿到信息
        String name = etname.getText().toString();
        String phone = etphone.getText().toString();
        String email = etemail.getText().toString();

if (TextUtils.isEmpty(name) || TextUtils.isEmpty(phone)
                || TextUtils.isEmpty(email)) {
            Toast.makeText(this, "信息必须都要填写", 0).show();
            return;
        }

/**
         * 插入数据的思路:
         *    1.在raw_contact表中查询所有的记录的个数
         *    2.给个数加1就是新的记录的id
              3.给data表插入记录
         */

// 获取内容解析器
        ContentResolver resolver = getContentResolver();
        // 设定访问的uri
        Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
        Uri datauri = Uri.parse("content://com.android.contacts/data");
        // 查询所有联系人的id  //获取所有记录的个数

Cursor idCursor = resolver.query(uri, new String[] { "contact_id" },
                null, null, null);
        int count = idCursor.getCount() ;
        idCursor.close() ;
        //插入记录的id
        int id = count + 1 ;
        //向raw_contact插入id
        ContentValues values =  new ContentValues() ;
        values.put("contact_id", id) ;
        resolver.insert(uri, values) ;  //id就插入到表raw_contact中了
        
        //向data表中插入数据
        //插入name记录
        ContentValues namevalues = new ContentValues() ;
        namevalues.put("mimetype", "vnd.android.cursor.item/name") ;
        namevalues.put("data1", name) ;
        namevalues.put("raw_contact_id",id) ;
        resolver.insert(datauri, namevalues) ;
        
        //插入电话
        ContentValues phonevalues = new ContentValues() ;
        phonevalues.put("mimetype", "vnd.android.cursor.item/phone_v2") ;
        phonevalues.put("data1", phone) ;
        phonevalues.put("raw_contact_id",id) ;
        resolver.insert(datauri, phonevalues) ;
        
        //插入邮箱
        ContentValues emailvalues = new ContentValues() ;
        emailvalues.put("mimetype", "vnd.android.cursor.item/email_v2") ;
        emailvalues.put("data1", email) ;
        emailvalues.put("raw_contact_id",id) ;
        resolver.insert(datauri, emailvalues) ;
        
        Toast.makeText(this, "插入成功", 0).show() ;
    }

时间: 2024-12-26 03:26:32

内容提供者(获取联系人信息和插入联系人)的相关文章

安卓小案例收集五(内容提供者、动画)

内容提供者 获取系统短息 插入系统短信 获取系统联系人 插入联系人 内容观察者 Fragment Fragment数据传递 帧动画 补间动画 属性动画 内容提供者 配置: <provider android:name="com.itheima.mycontentprovider.PersonProvider" android:authorities="com.itheima.people" android:exported="true"&g

使用内容提供者和xml备份联系人

1.通过内容提供者获取联系人信息 1 package com.ithaimazyh.readcontact; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import com.ithaimazyh.readcontact.domain.PersonInfo; 7 import com.ithaimazyh.readcontact.service.SavePersonsInfo; 8 9 import android.n

通过 ContentResolver 读取联系人信息

1.首先动态获取 读取联系人信息权限    <1>配置文件中声明对应权限 <uses-permission android:name="android.permission.READ_CONTACTS"/>    <2>判断是否具有对应权限 if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSIO

android100 自定义内容提供者

#ContentProvider,就是来操作数据的,增删改查, * 四大组件之一 * 应用的数据库是不允许其他应用访问的 * 内容提供者的作用就是让别的应用访问到你的数据库 * 内容提供者的作用:把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用 *短信联系人都是在数据库里面.mmssms是短信数据库, *短信数据库有短信数据库的内容提供者,联系人数据库有联系人数据库的内容提供者.拿到对应数据库的内容提供者就能够访问对应的数据库数据. ###短信数据库 * sms表 * body

使用内容提供者备份短信

1.获取短信的权限配置 1 <uses-permission android:name="android.permission.READ_SMS"/> 2 <uses-permission android:name="android.permission.WRITE_SMS"/> 2.通过内容提供者获取短信内容 1 package com.example.readsysmsm; 2 3 import java.util.ArrayList;

(8)Launcher3客制化之ContentProvider内容提供者,实现其他应用修改数据库更新等操作

首先添加两个权限 <uses-permission android:name="com.android.launcher3.permission.READ_SETTINGS"/> <uses-permission android:name="com.android.launcher3.permission.WRITE_SETTINGS"/> 这两个是修改 桌面的数据库的权限 不添加就修改不了哦 直接通过内容提供者获取数据, static Ar

内容提供者学习笔记

##内容提供者笔记## ###步骤### 1.创建实现了ContentProvider的子类MyContentProvider并重写父类的方法 2.作为android四大组件之一,要在manifest.xml文件中注册provider标签 <provider             android:name="cn.itcast.db.MyContentProvider"             android:authorities="cn.itcast.db.per

无废话Android之内容观察者ContentObserver、获取和保存系统的联系人信息、网络图片查看器、网络html查看器、使用异步框架Android-Async-Http(4)

1.内容观察者ContentObserver 如果ContentProvider的访问者需要知道ContentProvider中的数据发生了变化,可以在ContentProvider 发生数据变化时调用getContentResolver().notifyChange(uri, null)来通知注册在此URI上的访问者,例子如下: private static final Uri URI = Uri.parse("content://person.db"); public class

weiyi通讯录(二)获取联系人信息包括头像 增删改查功能,

看了下第一期的访问量,100都没有可能很多人不需要吧,之前跟过一个大神学做项目,他都不吧核心代码告诉我,感觉没有一点分享精神,所以我就自己做.没跟他一起做 这里把上次的代码分享一下 我这里分享的跟我博客里面可能不一样因为我已经做完第一个模块了,代码就没有分开了 第一期的代码地址:http://download.csdn.net/detail/u010982856/8232855 分享的是类似的代码 基本跟我的是一样.如果需要的联系人我把 或者加入我的交流群吧 -----------欢迎加入交流群