美文网首页
ContentProvider(2) — ContentReso

ContentProvider(2) — ContentReso

作者: 奔跑的佩恩 | 来源:发表于2021-03-06 21:36 被阅读0次

前言

在上一节中,我们已经对ContentProvider的使用做了简单介绍,这篇就让我们学习下ContentResolver的使用吧。ContentResolver主要用于获取手机短信,联系人等信息。为了方便使用,我这里封装了一个工具类——ContactUtil。下面就来介绍它的使用吧。

今天涉及知识有:

  1. ContactUtil 类用来做什么
  2. ContactUtil 类方法简介
  3. 设置运行权限
  4. ContactUtil 在 Activity 中使用
  5. 效果图和项目结构图
  6. ContactUtil 源码

获取短信信息如下:

    address=15172401937 person=0 body=牛啊牛啊 date=2021-03-02 17:52:50 type=接收
    address=18 person=null body=10086 date=2021-03-02 15:26:27 type=发送失败
    address=10001 person=0 body=尊敬的客户您好:2021年03月01日您本月的赠送费用90.00元已到账,剩余赠送费用为1800.00元、剩余20个月赠送到期,查询当月实时话费请回复101。点击 http://a.189.cn/JJc9uS 安装“欢go”客户端,查流量、充话费、报故障、办业务…智慧生活,尽在“欢go”! date=2021-03-01 10:22:57 type=接收
    address=051081000015 person=0 body=【无锡市文明办宣】扬文明之风,怀大爱之心,行礼仪之道,建至德之城——美丽无锡欢迎您。温馨提示:文明出行,安全相伴。 date=2021-02-18 17:34:38 type=接收
    address=10001 person=0 body=如您14日内来自或途经国内疫情中高风险地区,请您提前向所在村(居)委和单位或所住宾馆报备,并在抵肥后6小时内向所在村(居)委和单位或所住宾馆报告,配合做好隔离等健康管理措施。如有疑问,请拨打0551-12345政府服务热线或查询合肥疫情防控最新通告。疫情防控,需要你我共同努力!【合肥市防指办】 date=2021-02-18 14:58:58 type=接收

获取联系人信息如下:

姓名: 华为客服  手机号: 4008308300  邮箱: mobile@huawei.com
姓名: 小明  手机号: 183 7295 1357  邮箱: null

一. ContactUtil 类用来做什么

ContactUtil是一个获取手机短信,联系人以及发送短信的工具类。其作用是便于快捷的实现获取手机短信信息获取手机联系人信息以及发送短信功能。

二. ContactUtil 类方法简介

ContactUtil主要方法如下:

    /***
     * 获取手机短信
     *
     * 需要在 androidManifast.xml中添加以下权限
     * <uses-permission android:name="android.permission.READ_SMS"/>
     * android 6.0+还需要在代码中手动添加以上权限。
     *
     * @param context
     * @return
     */
    public static List<SmsData> getSMSDataList(Context context)

    /**
     * 获取手机联系人
     *
     * 需要在 androidManifast.xml中添加以下权限
     * <uses-permission android:name="android.permission.READ_CONTACTS"/>
     * android 6.0+还需要在代码中手动添加以上权限。
     *
     *
     * 通过ContactsContract.Contacts.CONTENT_URI来获取_ID和DISPLAY_NAME
     * _ID 该联系人的索引
     * 通过这个ID可以在ContactsContract.CommonDataKinds.Phone.CONTENT_URI 中找到该联系人的电话号码
     * 通过这个ID可以在ContactsContract.CommonDataKinds.Email.CONTENT_URI 找到该联系人的邮箱
     * DISPLAY_NAME 是该联系人的姓名
     */
    public static List<ContactData> getContactDataList(Context context)

    /****
     * 发送短信
     *
     * 需要在 androidManifast.xml中添加以下权限
     * <uses-permission android:name="android.permission.SEND_SMS"/>
     * android 6.0+还需要在代码中手动添加以上权限。
     *
     * @param phoneNumber:发送短信时对方电话号码
     * @param message:要发送的信息
     * @param sendSmsAction: 发送短信时需要处理发送事件的广播action,要设置成唯一标识字符串,如:com.test.kk.send
     * @param receiveSmsAction: 接收短信时需要处理接收事件的广播action,要设置成唯一标识字符串,如:com.test.kk.receive
     * @param context:上下文
     */
    public static void sendSmsMessage(String phoneNumber,String message,
                                      String sendSmsAction,
                                      String receiveSmsAction,
                                      Context context)

为了方便存放短信信息和联系人信息,我这里分别建了两个类SmsDataContactData,其中SmsData用于装短信数据,ContactData用于装联系人数据。
SmsData代码如下:

/**
 * Title: 短信数据载体
 *
 * description:
 * autor:pei
 * created on 2021/3/2
 */
public class SmsData {

    private String address;//短信号码
    private String person;//人物
    private String body;//信息
    private String date;//时间
    private String type;//类型

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPerson() {
        return person;
    }

    public void setPerson(String person) {
        this.person = person;
    }

    public String getBody() {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

}

ContactData代码如下:

/**
 * Title: 手机联系人数据载体
 *
 * description:
 * autor:pei
 * created on 2021/3/2
 */
public class ContactData {

    private String name;//姓名
    private String number;//电话号码
    private String email;//邮箱

    public String getName() {
        return name;
    }

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

    public String getNumber() {
        return number;
    }

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

    public String getEmail() {
        return email;
    }

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

三. 设置运行权限

读取手机短信,联系人信息,以及发送短信据需要设置手机权限。你需要在Androidmanifast.xml中添加以下权限:

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

当然,你还需要添加Android 6.0+手动权限和FileProvider文件权限,具体可参考文章
PermissionsDispatcher动态权限申请kotlin版
接着需要添加FileProvider相关处理,大家可参考以下文章
SpUtil多样加密存储,兼容android9.0

四.ContactUtil 在 Activity 中使用

下面给出ContactUtilTempActivity中使用代码:

public class TempActivity extends AppCompatActivity{

    private TextView mTvTest;
    private Button mBtnTest;
    private Button mBtnTest2;
    private Button mBtnTest3;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_temp);

        //初始化控件
        initView();
        //初始化数据
        initData();
        //控件监听
        setListener();
    }

    /**初始化控件**/
    private void initView(){
        mTvTest=findViewById(R.id.mTvTest);
        mBtnTest=findViewById(R.id.mBtnTest);
        mBtnTest2=findViewById(R.id.mBtnTest2);
        mBtnTest3=findViewById(R.id.mBtnTest3);
    }

    private void initData() {
        //设置mTvTest垂直滚动
        mTvTest.setMovementMethod(ScrollingMovementMethod.getInstance());//主要是这句话在起作用
    }

    /**控件监听**/
    private void setListener() {
        //获取短信信息
        mBtnTest.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //查询短信
                List<SmsData> list = ContactUtil.getSMSDataList(TempActivity.this);
                StringBuffer buffer=new StringBuffer();
                for (SmsData data : list) {
                    String message= "address="+data.getAddress()
                            +" person="+data.getPerson()
                            +" body="+data.getBody()
                            +" date="+data.getDate()
                            +" type="+data.getType();
                    buffer.append(message+"\n");
                }
                LogUtil.i(buffer.toString());
                mTvTest.setText(buffer.toString());
            }
        });

        //获取联系人信息
        mBtnTest2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //查询联系人
                List<ContactData> clist = ContactUtil.getContactDataList(TempActivity.this);

                StringBuffer buffer=new StringBuffer();
                for (ContactData cd : clist) {
                    String message="姓名: " + cd.getName() + "  手机号: " + cd.getNumber() + "  邮箱: " + cd.getEmail()+"\n";
                    buffer.append(message);
                }
                LogUtil.i(buffer.toString());
                mTvTest.setText(buffer.toString());
            }
        });

        //发送短信
        mBtnTest3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //发起短信
                ContactUtil.sendSmsMessage("18372951357", "我是测试信息","com.test.kk.send","com.test.kk.receive", TempActivity.this);
            }
        });

    }

}

五. 效果图和项目结构图

获取短信信息如下:

    address=15172401937 person=0 body=牛啊牛啊 date=2021-03-02 17:52:50 type=接收
    address=18 person=null body=10086 date=2021-03-02 15:26:27 type=发送失败
    address=10001 person=0 body=尊敬的客户您好:2021年03月01日您本月的赠送费用90.00元已到账,剩余赠送费用为1800.00元、剩余20个月赠送到期,查询当月实时话费请回复101。点击 http://a.189.cn/JJc9uS 安装“欢go”客户端,查流量、充话费、报故障、办业务…智慧生活,尽在“欢go”! date=2021-03-01 10:22:57 type=接收
    address=051081000015 person=0 body=【无锡市文明办宣】扬文明之风,怀大爱之心,行礼仪之道,建至德之城——美丽无锡欢迎您。温馨提示:文明出行,安全相伴。 date=2021-02-18 17:34:38 type=接收
    address=10001 person=0 body=如您14日内来自或途经国内疫情中高风险地区,请您提前向所在村(居)委和单位或所住宾馆报备,并在抵肥后6小时内向所在村(居)委和单位或所住宾馆报告,配合做好隔离等健康管理措施。如有疑问,请拨打0551-12345政府服务热线或查询合肥疫情防控最新通告。疫情防控,需要你我共同努力!【合肥市防指办】 date=2021-02-18 14:58:58 type=接收

获取联系人信息如下:

姓名: 华为客服  手机号: 4008308300  邮箱: mobile@huawei.com
姓名: 小明  手机号: 183 7295 1357  邮箱: null

项目结构图如下:


image.png

六. ContactUtil 源码

ContactUtil 源码如下:

相关文章

网友评论

      本文标题:ContentProvider(2) — ContentReso

      本文链接:https://www.haomeiwen.com/subject/swuqqltx.html