Android读取短信和联系人

读取短信和联系人经常会用到,要了解的是这是内容提供者的知识点

先说短信,要从数据库中获取数据,就要了解其结构

短信数据库在data-->data中的下面路径

它的表结构如下,有3个是我们要注意的

Java代码为

     //获取内容提供者
        ContentResolver contentResolver = getContentResolver();
        //获取短信表的路径
        Uri uri = Uri.parse("content://sms");
        //设置要查询的列名
        String[] line = {"address", "date", "body"};
        //各个参数的意思,路径、列名、条件、条件参数、排序
        Cursor cursor = contentResolver.query(uri, line, null, null, null);
        //下面就跟操作普通数据库一样了
        if (cursor != null) {
            while (cursor.moveToNext()) {
                String address = cursor.getString(cursor.getColumnIndex("address"));
                String date = cursor.getString(cursor.getColumnIndex("date"));
                String body = cursor.getString(cursor.getColumnIndex("body"));
                Log.e("短信", "address:" + address + "\ndate:" + date + "\nbody:" + body);
            }
            cursor.close();
        }

获取联系人就比较复杂了,其表结构也比较复杂

数据库所在位置data-->data中的下面路径

data表

mimetypes表

raw_contacts表

了解其表结果后,就开始写代码了

       private List<ContactsData> contactsDatas = new ArrayList<>();
        //获取内容提供者
        ContentResolver contentResolver = getContentResolver();
        //获取raw_contacts表的路径
        Uri raw_contact_uri = Uri.parse("content://com.android.contacts/raw_contacts");
        //各个参数的意思,路径、列名、条件、条件参数、排序
        Cursor contactId = contentResolver.query(raw_contact_uri, new String[]{"contact_id"}, null, null, null);
        //下面就跟操作普通数据库一样了
        if (contactId != null) {
            while (contactId.moveToNext()) {
                //获取contact_id的值,它对应data表中raw_contact_id的值
                String id = contactId.getString(contactId.getColumnIndex("contact_id"));

                //获取data表的路径
                Uri data_uri = Uri.parse("content://com.android.contacts/data");
                //各个参数的意思,路径、列名、条件、条件参数、排序
                Cursor dataCursor = contentResolver.query(data_uri, new String[]{"mimetype", "data1"},
                        "raw_contact_id=?", new String[]{id}, null);
                if (dataCursor != null) {
                    //每次循环创建一个实例用于保存data表中的数据
                    ContactsData contactsData = new ContactsData();
                    while (dataCursor.moveToNext()) {
                        String type = dataCursor.getString(dataCursor.getColumnIndex("mimetype"));
                        switch (type) {
                            case "vnd.android.cursor.item/email_v2":
                                //这是邮箱信息
                                contactsData.setEmail(dataCursor.getString(dataCursor.getColumnIndex("data1")));
                                break;
                            case "vnd.android.cursor.item/phone_v2":
                                //这是手机号码信息
                                contactsData.setNumber(dataCursor.getString(dataCursor.getColumnIndex("data1")));
                                break;
                            case "vnd.android.cursor.item/name":
                                //这是联系人的名字
                                contactsData.setName(dataCursor.getString(dataCursor.getColumnIndex("data1")));
                                break;
                        }
                    }
                    //把查询到的信息添加到集合中
                    contactsDatas.add(contactsData);
                    dataCursor.close();
                }
            }
            contactId.close();
        }
        for (ContactsData c : contactsDatas) {
            Log.e("联系人", c.toString());
            Toast.makeText(this,c.toString(),Toast.LENGTH_SHORT).show();
        }

为了方便管理创建一个Javabean

public class ContactsData {
    private String email;
    private String number;
    private String name;
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return "ContactsData{" +
                "email=‘" + email + ‘\‘‘ +
                ", number=‘" + number + ‘\‘‘ +
                ", name=‘" + name + ‘\‘‘ +
                ‘}‘;
    }
}

最后别忘了加上权限

<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>

如过是Android 6.0以上的版本还要动态获取权限

获取联系人的效果图

时间: 2024-11-03 10:21:26

Android读取短信和联系人的相关文章

Android自动读取短信验证码

Android自动读取短信验证码 extends:http://www.cnblogs.com/jiayaguang/p/4366384.html 实现自动获取手机的短信验证码,原理通过监听短信数据库的变化来解析短信,获取验证码. 直接附上代码: 1.建立一个监听数据库的类 import java.util.regex.Matcher; import java.util.regex.Pattern; import android.app.Activity; import android.data

Android之——短信的备份与还原

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47091281 目前,Android手机中的一些软件可以实现手机短信的备份与还原操作.这篇博文就是要向大家介绍如何实现Android短信的备份与还原操作.好了,相信大家对这些实用的功能还是比较感兴趣的,不多说了,我们直接进入主题吧. 一.原理 我的实现原理很简单,界面上放置几个TextView列表,其中两项为"短信的备份"和"短信的还原",点击&quo

读取短信并复制验证码小工具

获取短信有两种方式,第一种是通过广播接收器,第二种通过读取短信数据库. 第一种: 静态注册了一个广播,通过接收包含android.provider.Telephony.SMS_RECEIVED动作的广播,获取新收到的短信内容. <receiver android:name=".GetSMS" android:enabled="true" android:exported="true"> <intent-filter androi

android获取短信验证码并自动填写的实现一

android获取短信验证码并自动填写的实现一 android获取短信验证码并自动填写的实现一,有需要的朋友可以参考下. 现在的应用在注册登录或者修改密码中都用到了短信验证码,那在android中是如何实现获取短信验证码并自动填写的呢? 首先,需要要在manifest中注册接收和读取短信的权限: <uses-permission android:name="android.permission.RECEIVE_SMS"></uses-permission> &l

Android 删除短信

1.删除短信的函数,一条一条的删除所有短信 /* * Delete all SMS one by one */ public void deleteSMS() { try { ContentResolver CR = getContentResolver(); // Query SMS Uri uriSms = Uri.parse("content://sms/sent"); Cursor c = CR.query(uriSms, new String[] { "_id&qu

android发送短信验证码并自动获取验证码填充文本框

android注册发送短信验证码并自动获取短信,截取数字验证码填充文本框. 一.接入短信平台 首先需要选择短信平台接入,这里使用的是榛子云短信平台(http://smsow.zhenzikj.com), 两分钟申请测试账号,赠送了100条测试短信. android使用java的jar包即可开发 jar下载: http://smsow.zhenzikj.com/doc/sdk.html API文档:http://smsow.zhenzikj.com/doc/java_sdk_doc.html 使用

Android获取短信验证码

Android开发中关于短息验证码的设计层出不穷,越来越多的应用为了更好的提高软件的安全性,开始使用通过服务器向用户发送验证码的方式,来保护用户个人信息的安全性.无论是用户注册时的信息验证还是当用户发出找回密码请求时的短信验证,他们的工作原理大致上是一致的,因为项目的需要研究了一下关于这方面的知识,本篇我将带领大家一起实现这一当下流行的设计方案. 众所周知,短信验证需要服务器端生成一个验证码,然后发送到用户输入的手机上,这个过程需要服务器主动向客户发送验证短信,所以这是就需要一个移动或联通的发送

android 定时短信app之时间选择器(一)

DatePicker类图 主要方法 public void init(int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener onDateChangedListener) 类 TimePicker类图 setOnTimeChangedListener public void setOnTimeChangedListener(TimePicker.OnTimeChangedListener onTime

Android开发短信备份小例子

主要是使用内容提供者ContentProvider #1.在activity_main.xml布局文件中添加写sdcard权限,并添加读短信的权限 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_par