安卓开发系列 之如何获取手机短信内容
作者:互联网
1 手机中短信数据库相关字段包括:
_id:短信序号,如100
address:发件人地址,即手机号,如+8613811810000,这里需要注意的是手机号是否加+86,可以加上86和不加86分别测试下
person:发件人,如果发件人在通讯录中则为具体姓名,陌生人为null
date:日期,long型,如1256539465022,可以对日期显示格式进行设置,这里在用sqlite语句进行筛选时date字段单位是毫秒,获取系统毫秒时间的代码是:
long totalMilliSeconds = System.currentTimeMillis();
protocol:协议0SMS_RPOTO短信,1MMS_PROTO彩信
read:是否阅读0未读,1已读
status:短信状态-1接收,0complete,64pending,128failed
type:短信类型1是接收到的,2是已发出
body:短信具体内容
读取短信内容的uri为:
Uri uri = Uri.parse(“content://sms”); //读取所有短信
Uri uri = Uri.parse(“content://sms/inbox”); //读取收件箱短信
2 在清单文件添加权限,获取短信读写权限:
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.RECEIVE_SMS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
3 核心代码为:
private void checkSMSPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS)
!= PackageManager.PERMISSION_GRANTED) {
//未获取到读取短信权限
//向系统申请权限
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_SMS}, REQ_CODE_CONTACT);
} else {
//执行自己的程序
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
//判断用户是否,同意 获取短信授权
if (requestCode == REQ_CODE_CONTACT && grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//获取到读取短信权限
//执行自己的程序
} else {
Toast.makeText(this, "未获取到短信权限", Toast.LENGTH_SHORT).show();
}
}
private void query() {
//读取所有短信
Uri uri = Uri.parse("content://sms/");
ContentResolver resolver = getContentResolver();
//查询条件可以根据实际业务填写,这里均为null,代表没有筛选条件
//其中第三个参数代表where条件
//第五个参数代表order by
//第四个参数根据第三个参数来写,如果你在第三个参数里面有?,那么你在第四个写的数据就会替换掉?
Cursor cursor = resolver.query(uri, new String[]{"_id", "address", "body", "date", "type"}, null, null, null);
if (cursor != null && cursor.getCount() > 0) {
String body;
while (cursor.moveToNext()) {
//存储短信内容
body = cursor.getString(2);
}
}
}
//补充:
cursor.close();//关闭游标,且释放资源
cursor.isClosed();//如果为TRUE表示该游标已关闭
cursor.getColumnCount();//返回所有列的总数
cursor.getColumnNames();//返回一个字符串数组的列名,即将列名全部返回到一个字符串数组中
cursor.getColumnName(columnIndex);//从给定的索引返回列名
cursor.getCount();//返回Cursor中的行数
cursor.moveToFirst();//移动光标到第一行
cursor.moveToLast();//移动光标到最后一行
cursor.moveToNext();//移动光标到下一行
cursor.moveToPrevious();//移动光标到上一行
cursor.moveToPosition(position);//移动光标到给定位置
参考资料:
https://blog.csdn.net/qq_42179105/article/details/82929521?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&dist_request_id=8d7d5f2b-1b3f-4f66-b5d1-e89d3979bb04&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control Android studio 获取手机短信内容并输出显示
https://blog.csdn.net/chenliguan/article/details/48316585 Android进阶之读取手机短信显示listview
https://blog.csdn.net/ALittleForward/article/details/40480389?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&dist_request_id=1f38157e-2fdc-42f8-ab73-f2990ab5f300&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control 基于Android的短信应用开发
标签:blog,短信,读取,获取,安卓,Uri,cursor,手机短信,null 来源: https://blog.csdn.net/langxiaolin/article/details/114261336