安卓使用contentProvider操作通讯录(增删改查)

安卓使用contentProvider操作通讯录

安卓6.0以上 sdk>=23 需要添加动态权限获取
AndroidMainifest.xml,最后会贴上全部代码

 <!-- 读写联系人权限 -->
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.READ_CONTACTS" />

查询通讯录联系人

        //根据游标返回全部数据
        void printQueryResult(){
            //content://com.android.contacts/data/phones
            //ContactsContract.CommonDataKinds常量类
            Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,SQL_COLUMN,null,null,null);
            if(cursor!=null){
                textView.setText("");
                while (cursor.moveToNext()){
                    String ID =cursor.getString(0);
                    String contactName =cursor.getString(1);
                    String photoNumber =cursor.getString(2);
                    textView.append("联系人ID:"+ID+"\n联系人姓名:"+contactName+"\n联系人电话:"+photoNumber+"\n");
                }
                cursor.close();
            }
        }

新增联系人

        //新增
       void insert(){
            String name =userName.getText().toString();
            String phone =photo.getText().toString();
            ContentValues values =new ContentValues();
            //ContactsContract.RawContacts.CONTENT_URI 查询的URI
            Uri uri =getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI,values);
            long rawContentId =ContentUris.parseId(uri);//获取到插入的id
           if(!name.equals("")){
               values.clear();
               //插入姓名
               values.put(ContactsContract.Data.RAW_CONTACT_ID,rawContentId);//插入的id
               values.put(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);//插入name的类型
               values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME,name);//放入实际值

               getContentResolver().insert(ContactsContract.Data.CONTENT_URI,values);
           }

           //插入电话
           if(!phone.equals("")){
               values.put(ContactsContract.Data.RAW_CONTACT_ID,rawContentId);//插入的id
               values.put(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
               values.put(ContactsContract.CommonDataKinds.Phone.TYPE,ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
               values.put(ContactsContract.CommonDataKinds.Phone.NUMBER,phone);
               getContentResolver().insert(ContactsContract.Data.CONTENT_URI,values);
           }

           Toast.makeText(getApplicationContext(),"添加成功",Toast.LENGTH_LONG).show();

           //查询后自动刷新TextView查看是否添加成功
           printQueryResult();
        }

删除指定联系人

        //删除
        void delete(){
            String name =userName.getText().toString();
            if(!name.equals("")){
                getContentResolver().delete(ContactsContract.RawContacts.CONTENT_URI,ContactsContract.Contacts.DISPLAY_NAME+"=?",new String[]{name});
            }
            printQueryResult();
        }

根据用户名查询

//查询
        void query(){
            String name =userName.getText().toString();
            if(!name.equals("")){
                getContact(name);
            }
        }

根据联系人姓名修改数据

        //修改
        void update(){
            String name =userName.getText().toString();
            String phone =photo.getText().toString();
            Long rawContactId=0L;
            Uri uri =Uri.parse("content://com.android.contacts/data");
           ContentResolver resolver = getContentResolver();
           ContentValues values =new ContentValues();
           values.put("data1",phone);

           if(!name.equals("")){
               mSelectClaus =ContactsContract.Contacts.DISPLAY_NAME+"=?";
               mSelectionArgs =new String[]{name};
               Cursor cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,SQL_COLUMN,mSelectClaus,mSelectionArgs,null);
             if(cursor.moveToFirst()){
                 rawContactId =cursor.getLong(0);
             }
             resolver.update(uri,values,"mimetype=? and raw_contact_id =?",new String[]{ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,rawContactId+""
             });
             cursor.close();
             printQueryResult();
           }
        }

全部代码如下
MainActivity.java

package com.example.contentproviderdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.Manifest;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    TextView textView;
    EditText userName,photo;
    Button insert,update,delete,query,queryAll;
    //查询返回的列
    String[] SQL_COLUMN =new String[]{
            ContactsContract.CommonDataKinds.Identity.RAW_CONTACT_ID,//row_contact_id
            ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,//display_name
            ContactsContract.CommonDataKinds.Phone.NUMBER//data1
    };
    //查询限制条件
    String mSelectClaus;

    //查询限制条件的内容
    String[] mSelectionArgs;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView =findViewById(R.id.textView);//显示查询出的数据
        insert =findViewById(R.id.insertBtn);//添加按钮
        update =findViewById(R.id.updateBtn);//修改按钮
        delete =findViewById(R.id.deleteBtn);//删除
        query =findViewById(R.id.querytBtn);//查询
        queryAll =findViewById(R.id.queryAllBtn);//查询全部
        userName =findViewById(R.id.userName);//用户输入
        photo =findViewById(R.id.photo);//密码输入

        insert.setOnClickListener(new mClick());
        update.setOnClickListener(new mClick());
        delete.setOnClickListener(new mClick());
        query.setOnClickListener(new mClick());
        queryAll.setOnClickListener(new mClick());


        if(Build.VERSION.SDK_INT >=23){
            String[] permissions ={Manifest.permission.WRITE_CONTACTS,Manifest.permission.READ_CONTACTS};
          int i=0;
          for(String permission:permissions){
              //如果没有给权限就从新请求
              if(this.checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED){
                  this.requestPermissions(permissions,i++);
              }
          }
        }

    }

    private  class mClick implements View.OnClickListener{

        @Override
        public void onClick(View v) {
            switch (v.getId()){
                case R.id.insertBtn:
                    insert();
                    break;
                case R.id.updateBtn:
                    update();
                    break;
                case R.id.deleteBtn:
                    delete();
                    break;
                case R.id.querytBtn:
                    query();
                    break;
                case R.id.queryAllBtn:
                    printQueryResult();
                    break;
            }
        }

        //新增
       void insert(){
            String name =userName.getText().toString();
            String phone =photo.getText().toString();
            ContentValues values =new ContentValues();
            //ContactsContract.RawContacts.CONTENT_URI 查询的URI
            Uri uri =getContentResolver().insert(ContactsContract.RawContacts.CONTENT_URI,values);
            long rawContentId =ContentUris.parseId(uri);//获取到插入的id
           if(!name.equals("")){
               values.clear();
               //插入姓名
               values.put(ContactsContract.Data.RAW_CONTACT_ID,rawContentId);//插入的id
               values.put(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);//插入name的类型
               values.put(ContactsContract.CommonDataKinds.StructuredName.GIVEN_NAME,name);//放入实际值

               getContentResolver().insert(ContactsContract.Data.CONTENT_URI,values);
           }

           //插入电话
           if(!phone.equals("")){
               values.put(ContactsContract.Data.RAW_CONTACT_ID,rawContentId);//插入的id
               values.put(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
               values.put(ContactsContract.CommonDataKinds.Phone.TYPE,ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE);
               values.put(ContactsContract.CommonDataKinds.Phone.NUMBER,phone);
               getContentResolver().insert(ContactsContract.Data.CONTENT_URI,values);
           }

           Toast.makeText(getApplicationContext(),"添加成功",Toast.LENGTH_LONG).show();

           //查询后自动刷新TextView查看是否添加成功
           printQueryResult();
        }

        //修改
        void update(){
            String name =userName.getText().toString();
            String phone =photo.getText().toString();
            Long rawContactId=0L;
            Uri uri =Uri.parse("content://com.android.contacts/data");
           ContentResolver resolver = getContentResolver();
           ContentValues values =new ContentValues();
           values.put("data1",phone);

           if(!name.equals("")){
               mSelectClaus =ContactsContract.Contacts.DISPLAY_NAME+"=?";
               mSelectionArgs =new String[]{name};
               Cursor cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,SQL_COLUMN,mSelectClaus,mSelectionArgs,null);
             if(cursor.moveToFirst()){
                 rawContactId =cursor.getLong(0);
             }
             resolver.update(uri,values,"mimetype=? and raw_contact_id =?",new String[]{ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,rawContactId+""
             });
             cursor.close();
             printQueryResult();
           }
        }

        //根据传入的姓名返回游标
        void getContact(String nameStr){
            mSelectClaus =ContactsContract.Contacts.DISPLAY_NAME+"=?";
            mSelectionArgs =new String[]{nameStr};
            Cursor cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,SQL_COLUMN,mSelectClaus,mSelectionArgs,null);
            if(cursor!=null){
                textView.setText("");
                while (cursor.moveToNext()){
                    String ID =cursor.getString(0);
                    String contactName =cursor.getString(1);
                    String photoNumber =cursor.getString(2);
                    textView.append("联系人ID:"+ID+"\n联系人姓名:"+contactName+"\n联系人电话:"+photoNumber+"\n");
                }
                cursor.close();
            }
        }


        //删除
        void delete(){
            String name =userName.getText().toString();
            if(!name.equals("")){
                getContentResolver().delete(ContactsContract.RawContacts.CONTENT_URI,ContactsContract.Contacts.DISPLAY_NAME+"=?",new String[]{name});
            }
            printQueryResult();
        }

        //查询
        void query(){
            String name =userName.getText().toString();
            if(!name.equals("")){
                getContact(name);
            }
        }


        //根据游标返回全部数据
        void printQueryResult(){
            //content://com.android.contacts/data/phones
            //ContactsContract.CommonDataKinds常量类
            Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,SQL_COLUMN,null,null,null);
            if(cursor!=null){
                textView.setText("");
                while (cursor.moveToNext()){
                    String ID =cursor.getString(0);
                    String contactName =cursor.getString(1);
                    String photoNumber =cursor.getString(2);
                    textView.append("联系人ID:"+ID+"\n联系人姓名:"+contactName+"\n联系人电话:"+photoNumber+"\n");
                }
                cursor.close();
            }
        }
    }
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.contentproviderdemo">
    <!-- 读写联系人权限 -->
    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />

    <EditText
        android:id="@+id/userName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="请输入用户名" />

    <EditText
        android:id="@+id/photo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="请输入电话" />

    <Button
        android:id="@+id/insertBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="添加"
        />

    <Button
        android:id="@+id/deleteBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="删除"
        />

    <Button
        android:id="@+id/updateBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="修改"
        />

    <Button
        android:id="@+id/querytBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="查询"
        />
    <Button
        android:id="@+id/queryAllBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="查询全部"
        />

</LinearLayout>

初学者 有什么不对的地方欢迎大佬指出来 0v0

  • 8
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值