前言
在上一节中,我们已经对ContentProvider
的使用做了简单介绍,这篇就让我们学习下ContentResolver
的使用吧。ContentResolver
主要用于获取手机短信,联系人等信息。为了方便使用,我这里封装了一个工具类——ContactUtil
。下面就来介绍它的使用吧。
今天涉及知识有:
- ContactUtil 类用来做什么
- ContactUtil 类方法简介
- 设置运行权限
- ContactUtil 在 Activity 中使用
- 效果图和项目结构图
- 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)
为了方便存放短信信息和联系人信息,我这里分别建了两个类SmsData
和ContactData
,其中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 中使用
下面给出ContactUtil
在TempActivity
中使用代码:
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
源码如下:
网友评论