android 读取手机全部短信息

import android.app.Activity;
import android.content.AsyncQueryHandler;
import android.content.ContentResolver;
import android.database.Cursor;
import android.net.Uri;

import com.feilu.flashloan.callback.OnSmsInboxListener;
import com.feilu.flashloan.ui.usercenter.bean.SmsInboxBean;
import com.google.gson.Gson;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**  * Created by fengpeihao on 2017/8/15.  * 读取手机短信工具类  */  public class SmsInboxUtils {

    private static SmsInboxUtils mContactUtils;
    private OnSmsInboxListener mListener;

    public static SmsInboxUtils with() {
        if (mContactUtils == null) {
            synchronized (ContactUtils.class) {
                mContactUtils = new SmsInboxUtils();
            }
        }
        return mContactUtils;
    }

    public void getSms(Activity activity, OnSmsInboxListener listener) {
        mListener = listener;
        MyAsyncQueryhandler asyncQueryhandler = new MyAsyncQueryhandler(activity.getContentResolver());
        /**  * content://sms/           全部短信  * content://sms/inbox        收件箱  * content://sms/sent        已发送  * content://sms/draft        草稿  * content://sms/outbox        发件箱  * content://sms/failed        发送失败  * content://sms/queued        待发送列表  */  Uri uri = Uri.parse("content://sms/");
        String[] projection = new String[]{"address", "person", "body", "date", "type"};//"_id", "address", "person","date", "type"1是接收到的,2是已发出  asyncQueryhandler.startQuery(0, null, uri, projection, null, null, "date desc");
    }

    private String getDate(String date) {
        Date callDate = new Date(Long.parseLong(date));
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(callDate);
    }

    private class MyAsyncQueryhandler extends AsyncQueryHandler {
        public MyAsyncQueryhandler(ContentResolver cr) {
            super(cr);
        }

        @Override
        protected void onQueryComplete(int token, Object cookie, Cursor cursor) {
            if (cursor != null && cursor.getCount() > 0) {
        
                List<SmsInboxBean> list = new ArrayList<>();
                while (cursor.moveToNext()) {
                    String number = cursor.getString(cursor.getColumnIndex("address"));//手机号  String name = cursor.getString(cursor.getColumnIndex("person"));//联系人姓名列表  String body = cursor.getString(cursor.getColumnIndex("body"));//内容  String date = getDate(cursor.getString(cursor.getColumnIndex("date")));//时间  String type = cursor.getString(cursor.getColumnIndex("type"));//1是接收到的,2是已发出
                    SmsInboxBean smsInboxBean = new SmsInboxBean(date, name, number, body, type);
                    list.add(smsInboxBean);
                }
                Gson gson = new Gson();
                mListener.onSuccess(gson.toJson(list));
            } else {
                if (mListener != null) mListener.onFailed();
            }
            super.onQueryComplete(token, cookie, cursor);
        }
    }
}
 
 
public interface OnSmsInboxListener {
    void onSuccess(String json);

    void onFailed();

}
注:
须要权限 
<uses-permission android:name="android.permission.READ_SMS"/>
6.0以上须要动态请求权限