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以上需要动态请求权限
相关文章推荐
- 在android中读取联系人信息的程序,包括读取联系人姓名、手机号码和邮箱
- android点滴之NFC手机如何轻松读取银行卡信息?
- 读取android手机流量信息
- Android中读取电话本Contacts联系人的所有电话号信息
- 读取android手机流量信息
- 读取android手机流量信息
- android:读取手机相关信息
- android中读取联系人的所有信息
- Android简易实战教程--第十一话《获取手机所有应用信息Engine类详解》
- android 读取手机硬件信息,我这里只读出SMEI码
- 在android中读取联系人信息的程序,包括读取联系人姓名、手机号码和邮箱
- Android简易实战教程--第十一话《获取手机所有应用信息Engine类详解》
- Android之获取手机上已安装的所有的应用程序的信息,并判断是否安装了某应用程序(系统程序或非系统应用程序判断)
- Android获取可读取的手机信息
- Android项目实战--手机卫士28--读取进程的信息并显示出来
- 读取手机中的联系人信息(android.provider.ContactsContract)
- Android中读取电话本Contacts联系人的所有电话号信息
- 读取Android手机设备相关信息
- [android开发]ContentResolver读取手机联系人信息
- 实现读取手机中所有联系人的主要信息(名称和联系电话),并以ListView显示