Android进阶之读取手机短信显示listview
2015-09-09 15:21
483 查看
一、读取的短信信息有
_id:短信序号,如100
thread_id:对话的序号,如100,与同一个手机号互发的短信,其序号是相同的
address:发件人地址,即手机号,如+8613811810000
person:发件人,如果发件人在通讯录中则为具体姓名,陌生人为null
date:日期,long型,如1256539465022,可以对日期显示格式进行设置
protocol:协议0SMS_RPOTO短信,1MMS_PROTO彩信 read:是否阅读0未读,1已读
status:短信状态-1接收,0complete,64pending,128failed
type:短信类型1是接收到的,2是已发出
body:短信具体内容
service_center:短信服务中心号码编号,如+8613800755500
二、例子代码
1、权限
2、item_sms.xml
3、activity_sms.xml
4、SmsInfo
5、SmsContent类读取信息内容
6、SmsListAdapter
7、SmsListActivity
三、参考链接
Android中读取短信信息
Android SMS 短信读取
四、效果图
_id:短信序号,如100
thread_id:对话的序号,如100,与同一个手机号互发的短信,其序号是相同的
address:发件人地址,即手机号,如+8613811810000
person:发件人,如果发件人在通讯录中则为具体姓名,陌生人为null
date:日期,long型,如1256539465022,可以对日期显示格式进行设置
protocol:协议0SMS_RPOTO短信,1MMS_PROTO彩信 read:是否阅读0未读,1已读
status:短信状态-1接收,0complete,64pending,128failed
type:短信类型1是接收到的,2是已发出
body:短信具体内容
service_center:短信服务中心号码编号,如+8613800755500
二、例子代码
1、权限
<!-- 读取短信权限 --> <uses-permission android:name="android.permission.READ_SMS" />
2、item_sms.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginLeft="8dp" android:orientation="horizontal" > <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center_vertical" android:layout_marginLeft="8dp" android:orientation="horizontal" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/tv_Sms_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" android:text="TextView" /> <TextView android:id="@+id/tv_Sms_body" android:textSize="12sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> </LinearLayout> </LinearLayout> </LinearLayout> </LinearLayout>
3、activity_sms.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.guan.contentproviderwork.contact.SmsListActivity"> <ListView android:id="@+id/lv_sms" android:layout_width="fill_parent" android:layout_height="fill_parent"> </ListView> </RelativeLayout>
4、SmsInfo
package com.guan.contentproviderwork.contact; /** * @author Guan * @file com.guan.contentproviderwork.contact * @date 2015/9/9 * @Version 1.0 */ public class SmsInfo { /** * 短信内容 */ private String smsbody; /** * 发送短信的电话号码 */ private String phoneNumber; /** * 发送短信的日期和时间 */ private String date; /** * 发送短信人的姓名 */ private String name; /** * 短信类型1是接收到的,2是已发出 */ private String type; public String getSmsbody() { return smsbody; } public void setSmsbody(String smsbody) { this.smsbody = smsbody; } public String getPhoneNumber() { return phoneNumber; } public void setPhoneNumber(String phoneNumber) { this.phoneNumber = phoneNumber; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getType() { return type; } public void setType(String type) { this.type = type; } }
5、SmsContent类读取信息内容
package com.guan.contentproviderwork.contact; import android.app.Activity; import android.database.Cursor; import android.net.Uri; import java.util.ArrayList; import java.util.List; /** * @author Guan * @file com.guan.contentproviderwork.contact * @date 2015/9/9 * @Version 1.0 */ public class SmsContent { private Activity activity; private Uri uri; List<SmsInfo> infos; public SmsContent(Activity activity, Uri uri) { infos = new ArrayList<SmsInfo>(); this.activity = activity; this.uri = uri; } /** * Role:获取短信的各种信息 <BR> * Date:2012-3-19 <BR> * * @author CODYY)peijiangping */ public List<SmsInfo> getSmsInfo() { String[] projection = new String[] { "_id", "address", "person", "body", "date", "type" }; Cursor cusor = activity.managedQuery(uri, projection, null, null, "date desc"); int nameColumn = cusor.getColumnIndex("person"); int dateColumn = cusor.getColumnIndex("date"); int phoneNumberColumn = cusor.getColumnIndex("address"); int smsbodyColumn = cusor.getColumnIndex("body"); int typeColumn = cusor.getColumnIndex("type"); if (cusor != null) { while (cusor.moveToNext()) { SmsInfo smsinfo = new SmsInfo(); smsinfo.setName(cusor.getString(nameColumn)); smsinfo.setDate(cusor.getString(dateColumn)); smsinfo.setPhoneNumber(cusor.getString(phoneNumberColumn)); smsinfo.setSmsbody(cusor.getString(smsbodyColumn)); smsinfo.setType(cusor.getString(typeColumn)); infos.add(smsinfo); } cusor.close(); } return infos; } }
6、SmsListAdapter
package com.guan.contentproviderwork.contact; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.TextView; import com.guan.contentproviderwork.R; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; /** * @author Guan * @file com.guan.contentproviderwork.contact * @date 2015/9/9 * @Version 1.0 */ public class SmsListAdapter extends BaseAdapter { private LayoutInflater layoutinflater; private List<SmsInfo> mInfos; public SmsListAdapter(Context context,List<SmsInfo> infos) { this.layoutinflater = LayoutInflater.from(context); this.mInfos = infos; } @Override public int getCount() { return mInfos.size(); } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if (convertView != null) { holder = (ViewHolder) convertView.getTag(); } else { convertView = layoutinflater.inflate(R.layout.item_sms, null); holder = new ViewHolder(convertView); convertView.setTag(holder); } holder.tvSmsName.setText(mInfos.get(position).getPhoneNumber()); holder.tvSmsBody.setText(mInfos.get(position).getSmsbody()); return convertView; } static class ViewHolder { @Bind(R.id.tv_Sms_name) TextView tvSmsName; @Bind(R.id.tv_Sms_body) TextView tvSmsBody; ViewHolder(View view) { ButterKnife.bind(this, view); } } }
7、SmsListActivity
package com.guan.contentproviderwork.contact; import android.app.Activity; import android.net.Uri; import android.os.Bundle; import android.widget.ListView; import com.guan.contentproviderwork.R; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; public class SmsListActivity extends Activity { @Bind(R.id.lv_sms) ListView lvSms; private List<SmsInfo> infos; /** * 所有的短信 */ public static final String SMS_URI_ALL = "content://sms/"; /** * 收件箱短信 */ public static final String SMS_URI_INBOX = "content://sms/inbox"; /** * 发件箱短信 */ public static final String SMS_URI_SEND = "content://sms/sent"; /** * 草稿箱短信 */ public static final String SMS_URI_DRAFT = "content://sms/draft"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_sms); ButterKnife.bind(this); Uri uri = Uri.parse(SMS_URI_INBOX); SmsContent sc = new SmsContent(this, uri); infos = sc.getSmsInfo(); lvSms.setAdapter(new SmsListAdapter(this,infos)); } }
三、参考链接
Android中读取短信信息
Android SMS 短信读取
四、效果图
相关文章推荐
- android开发,静音录制视频,在一般清晰度的前提下保证文件大小越小越好
- android之实时音效
- Android手势监测-GestureDector
- Android event事件上报方法
- Android更改状态栏颜色
- android 默认锁屏界面没有紧急呼救入口如何解决
- Android多线程编程(异步通信)--->Handler和AsyncTask
- Android进阶之读取手机联系人显示listview并点击拨号(CursorAdapter)
- android L平台增加来电翻转静音菜单、功能
- 圆形头像设置Android 原代码
- Android Handler简单使用
- Android短信息验证码自动填写详细介绍
- 日历算法Android
- Android学习——五种布局方式
- Android免Root无侵入AOP框架Dexposed
- android 权限大全
- Android免Root无侵入AOP框架Dexposed
- Mac 下安装使用Android Studio
- 【整理】Android中的USB中的UsbAccessory和UsbDevice的区别
- Android之自定义ContentProvider详解