失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 安卓使用ContentProvider实现读取手机联系人和短信内容

安卓使用ContentProvider实现读取手机联系人和短信内容

时间:2023-07-05 15:21:47

相关推荐

安卓使用ContentProvider实现读取手机联系人和短信内容

获取联系人效果图:

获取短信效果图:

前提--——添加权限:

<1>获取手机联系人

通过短信数据库获取联系人内容:

Activity代码:

packagecom.example.android_readcontacts;importandroid.content.ContentResolver;importandroid.database.Cursor;import.Uri;importandroid.support.v7.app.AppCompatActivity;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.ListView;importandroid.widget.SimpleAdapter;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;public classMainActivityextendsAppCompatActivity {privateContentResolvercontentResolver;privateList<Map<String, Object>>data;privateListViewlt_main_listview;privateSimpleAdaptersimpleAdapter;@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);lt_main_listview= (ListView) findViewById(R.id.lt_main_listview);//得到内容监听者contentResolver= getContentResolver();//展示数据data=newArrayList<Map<String,Object>>();//准备适配器simpleAdapter=newSimpleAdapter(this,data,android.R.layout.simple_list_item_2,newString[]{"name","phone"},new int[]{android.R.id.text1,android.R.id.text2});//设置适配器lt_main_listview.setAdapter(simpleAdapter);}//获取联系人public voidgetContacts(View view){//获取系统联系人地址Cursor cursor=contentResolver.query(Uri.parse("content://com.android.contacts/raw_contacts"),null,null,null,null);while(cursor.moveToNext()){Map<String,Object> map=newHashMap<>();//获取系统表字段//联系人idintid=cursor.getInt(cursor.getColumnIndex("_id"));//联系人姓名String displayName=cursor.getString(cursor.getColumnIndex("display_name"));//放值map.put("name",displayName);//根据联系人获取联系人数据Cursor cursor2=contentResolver.query(Uri.parse("content://com.android.contacts/raw_contacts/"+id+"/data"),null,null,null,null);while(cursor2.moveToNext()){String type=cursor2.getString(cursor2.getColumnIndex("mimetype"));String data1=null;if("vnd.android.cursor.item/phone_v2".equals(type)){data1 = cursor2.getString(cursor2.getColumnIndex("data1"));map.put("phone",data1);}}//放数据进集合data.add(map);}//通知适配器发生改变simpleAdapter.notifyDataSetChanged();}}

layout代码:

<?xml version="1.0"encoding="utf-8"?><RelativeLayoutxmlns:android="/apk/res/android"xmlns:tools="/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context="com.example.android_readcontacts.MainActivity"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="getContacts"android:text="获取手机所有联系人"/><ListViewandroid:id="@+id/lt_main_listview"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="60dp"></ListView></RelativeLayout>

<2>获取手机短信

通过短信数据库获取短信内容:

Activity代码:

packagecom.example.android_readcontacts;importandroid.content.ContentResolver;importandroid.database.Cursor;import.Uri;importandroid.os.Bundle;importandroid.support.annotation.Nullable;importandroid.support.v7.app.AppCompatActivity;importandroid.util.Log;importandroid.view.View;importandroid.widget.ListView;importandroid.widget.SimpleAdapter;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.regex.Matcher;importjava.util.regex.Pattern;/*** Created by Administrator on /2/21.*/public classTwoActivityextendsAppCompatActivity {privateContentResolvercontentResolver;privateList<Map<String, Object>>data;privateListViewlt_main_listview;privateSimpleAdaptersimpleAdapter;@Overrideprotected voidonCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_two);lt_main_listview= (ListView) findViewById(R.id.lt_main_listview2);//获取内容监听者contentResolver= getContentResolver();//展示数据data=newArrayList<Map<String,Object>>();//准备适配器simpleAdapter=newSimpleAdapter(this,data,android.R.layout.simple_list_item_2,newString[]{"number","body"},new int[]{android.R.id.text1,android.R.id.text2});//设置适配器lt_main_listview.setAdapter(simpleAdapter);}//获取系统短息地址privateUriuri= Uri.parse("content://sms/");//获取短信内容public voidgetSms(View view){//获取内容监听者ContentResolver cr=getContentResolver();//获取短信内容String[] projection =newString[]{"_id","address","person","body","date","type"};//创建查询Cursor cursor=cr.query(uri,projection,null,null,"date desc");if(null==cursor){return;}while(cursor.moveToNext()){Map<String,Object> map2=newHashMap<>();//循环获取短信内容//发件人地址String number=cursor.getString(cursor.getColumnIndex("address"));map2.put("number",number);//发件人,如果发件人在通讯录中则为具体姓名,陌生人为nullString name=cursor.getString(cursor.getColumnIndex("person"));map2.put("name",name);//短信具体内容String body=cursor.getString(cursor.getColumnIndex("body"));map2.put("body",body);//获取自己短信服务号码中的验证码~~Pattern pattern = pile(" [a-zA-Z0-9]{10}");Matcher matcher = pattern.matcher(body);if(matcher.find()) {String res = matcher.group().substring(1, 11);map2.put("content",res);}//放数据进集合data.add(map2);}//通知适配器发生改变simpleAdapter.notifyDataSetChanged();}}

layout代码:

<?xml version="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="/apk/res/android"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="match_parent"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="getSms"android:text="获取手机所有短信内容"/><ListViewandroid:id="@+id/lt_main_listview2"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="60dp"></ListView></LinearLayout>

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

如果觉得《安卓使用ContentProvider实现读取手机联系人和短信内容》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。