您的位置:首页 > 移动开发 > Android开发

android 读取手机所有短信息

2017-08-31 17:04 302 查看
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以上需要动态请求权限
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: