Telephony
类读取短信。
1、所需权限:在AndroidManifest.xml文件中添加读取短信的权限。
2、读取短信内容:使用ContentResolver查询短信数据库,获取短信的相关信息,如发件人、收件人、短信内容等。
3、短信数据库字段:包括_id(短信序号)、thread_id(对话序号)、address(发件人地址/手机号)、person(发件人姓名或null)、date(日期)、protocol(协议类型)、read(阅读状态)、status(短信状态)、type(短信类型)、body(短信内容)、service_center(短信服务中心号码编号)等。
字段名 | 类型 | 说明 |
_id | int | 短信序号,从1开始自增 |
thread_id | int | 对话的序号,与同一个手机号互发的短信序号相同 |
address | String | 发件人地址,即手机号 |
person | String | 发件人姓名,如果发件人在通讯录中则为具体姓名,陌生人为null |
date | long | 日期,时间戳格式 |
protocol | int | 协议类型,0表示SMS短信,1表示MMS彩信 |
read | int | 阅读状态,0表示未读,1表示已读 |
status | int | 短信状态,-1表示接收,0表示complete,64表示pending,128表示failed |
type | int | 短信类型,1表示接收到的,2表示已发出 |
body | String | 短信具体内容 |
service_center | String | 短信服务中心号码编号,如+8613800755500 |
1、如何在Android应用中动态请求读取短信的权限?
从Android 6.0(API级别23)开始,应用需要在运行时请求敏感权限,对于读取短信权限,可以在应用运行时通过调用ActivityCompat.requestPermissions()
方法来请求用户授权。
“`java
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_SMS}, REQUEST_CODE);
}
REQUEST_CODE
是一个整数,用于在回调方法中标识这次权限请求,当用户响应权限请求后,系统会回调onRequestPermissionsResult()
方法,你可以在这个方法中根据用户的选择(授予或拒绝权限)来执行相应的操作。 2、如何过滤特定联系人的短信? 在查询短信时,可以通过指定查询条件来过滤特定联系人的短信,如果你想获取来自某个特定手机号(如"1234567890")的短信,可以在查询时指定address
字段的值: ```java String selection = "address = ?"; String[] selectionArgs = new String[]{"1234567890"}; Cursor cur = cr.query(SMS_INBOX, projection, selection, selectionArgs, "date desc");
这样,查询结果将只包含来自手机号"1234567890"的短信,你可以根据实际需求修改查询条件,以过滤出符合特定条件的短信。