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获取contentResolverContentResolver 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");//发短信的人是谁,如果此人在通讯录显示其名字,如果不在,显示Nullint 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();}