1.在AndroidManifest.xml配置权限
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.WRITE_SMS"/>
2.在需要读取短信的函数里配置权限,然后读短信
//如果要读短信,必须在这里配置权限
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_SMS)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.READ_SMS}, 1);
}
//设置 读取收件箱
// Uri uri = Uri.parse(SMS_URI_INBOX);
Uri uri = Uri.parse(SMS_URI_ALL);
SmsContent sc = new SmsContent(this, uri);
//读取所有短信
infos = sc.getSmsInfo();
....
//activtiy是从MainActivity传进来的,从它获取context,再从contect获取contentResolver
ContentResolver cr = activity.getApplicationContext().getContentResolver();
//获取数据的列/属性
String[] projection = new String[]{"_id", "address", "person",
"body", "date", "type", "sim_id"};
Cursor cusor = cr.query(uri, projection, null, null, "date desc");
//发短信的人是谁,如果此人在通讯录显示其名字,如果不在,显示Null
int nameColumn = cusor.getColumnIndex("person");
//短信内容
int smsbodyColumn = cusor.getColumnIndex("body");
//日期,long型,如1256539465022,可以对日期显示格式进行设置
int dateColumn = cusor.getColumnIndex("date");
//type:短信类型1是接收到的,2是已发出
int typeColumn = cusor.getColumnIndex("type");
int simIdColumn = cusor.getColumnIndex("sim_id");
//发短信的手机号
int addressColumn = cusor.getColumnIndex("address");
if (cusor != null) {
while (cusor.moveToNext()) {
SmsInfo smsinfo = new SmsInfo();
String sms = "name:"+cusor.getString(nameColumn)+";"+
"date:"+cusor.getString(dateColumn)+";"+
"address:" +cusor.getString(addressColumn)+";"+
"body:"+cusor.getString(smsbodyColumn)+";"+
"type:"+cusor.getColumnIndex("type")+";"+
"sim_id:"+cusor.getColumnIndex("sim_id")+";"+
"imei:" + imeistring;
smsinfo.setSms(sms);
infos.add(smsinfo);
}
cusor.close();
}