Android获取所有短信
android获取所有的短信,通过内容访问者(ContentResolver)
//内容访问者
ContentResolver cr = getContentResolver();
下面是效果图
获取短信必须添加权限
<uses-permission android:name="android.permission.RECEIVE_SMS" >
</uses-permission>
<uses-permission android:name="android.permission.READ_SMS" >
</uses-permission>
访问者的访问的地址
Uri.parse("content://sms/");
sms:
_id:短信序号,如100
thread_id:对话的序号,如100,与同一个手机号互发的短信,其序号是相同的
address:发件人地址,即手机号,如+86138138000
person:发件人,如果发件人在通讯录中则为具体姓名,陌生人为null
date:日期,long型,如1346988516,可以对日期显示格式进行设置
protocol:协议0SMS_RPOTO短信,1MMS_PROTO彩信
read:是否阅读0未读,1已读
status:短信状态-1接收,0complete,64pending,128failed
type:短信类型1是接收到的,2是已发出
body:短信具体内容
service_center:短信服务中心号码编号,如+8613800755500
具体代码
public class MessageActivity extends AppCompatActivity {
private ListView lv_message_listview;
private String[] ss=null;//所以短信
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_message);
//获取listVIew
lv_message_listview = (ListView) findViewById(R.id.lv_message_listview);
//内容访问者
ContentResolver cr = getContentResolver();
//访问的地址
Uri uri = Uri.parse("content://sms/");
// 短信数据
Cursor c=cr.query(uri,null,null,null,null);
ss = new String[100];
// 调获取数据的方法
getMessage(c);
ArrayAdapter adapter=new ArrayAdapter(this,android.R.layout.simple_list_item_1, ss);
//设置适配器
lv_message_listview.setAdapter(adapter);
}
// 数据的方法
public void getMessage(Cursor cursor){
int i=0;
while(cursor.moveToNext()){
String str=cursor.getString(cursor.getColumnIndex("body"));//获取短信内容
ss[i]=str;
i++;
}
}