android 真机获取短信,android利用ContentResolver访问者获取手机联系人信息

利用ContentResolver内容访问者,获取手机联系人信息我做了两种不同的做法。第一种,直接获取所有手机联系人信息,展示在ListView中。第二种,通过Butten按钮跳转到系统的手机联系人界面,单个获取手机联系人信息,展示在ListView中,结果如下:

第一种:

bb56d53714f9639e660fa8c0212b9f86.png

第二种:

1e9b36b6de2f00fc0065d9b60f8cb33a.png

第一种:直接获取所有手机联系人信息

首先需要在AndroidManifest.xml文件中添加权限:

activity_main.xml布局:

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/activity_main"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context="com.example.android_25.MainActivity">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/lv_lxr"

>

activity_xs.xml布局:

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/activity_xs"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context="com.example.android_25.XsActivity">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:id="@+id/tv_name"

/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:id="@+id/tv_telephone"

/>

MainActivity类:

private ListView lv_lxr;

private Button b_name;

private ContentResolver cr;

private List> datalistView;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//获得ListView

lv_lxr = (ListView) findViewById(R.id.lv_lxr);

//得到访问者

cr = getContentResolver();

//定义一个接收联系人姓名和电话号码的集合

datalistView = new ArrayList<>();

Uri uri=Uri.parse("content://com.android.contacts/raw_contacts");

Cursor cursor= cr.query(uri,null,null,null,null);

while(cursor.moveToNext()){

int id=cursor.getInt(cursor.getColumnIndex("_id"));

Uri uriData=Uri.parse("content://com.android.contacts/raw_contacts/"+id+"/data");

Cursor contactData= cr.query(uriData,null,null,null,null);

//用来装姓名

String aa="";

//用来装号码

String bb="";

while(contactData.moveToNext()){

String type=contactData.getString(contactData.getColumnIndex("mimetype"));

//如果获取的是vnd.android.cursor.item/phone_v2则是号码

if(type.equals("vnd.android.cursor.item/phone_v2")){

bb=contactData.getString(contactData.getColumnIndex("data1"));

//如果获取的是vnd.android.cursor.item/name则是姓名

}else if(type.equals("vnd.android.cursor.item/name")) {

aa=contactData.getString(contactData.getColumnIndex("data1"));

}

}

//将用户名和号码放入Map集合中

Map map=new HashMap<>();

map.put("images",aa);

map.put("titles",bb);

datalistView.add(map);

}

SimpleAdapter adapter=new SimpleAdapter(this, datalistView,R.layout.activity_xs,new String[]{"images","titles"},new int[]{R.id.tv_name,R.id.tv_telephone});

lv_lxr.setAdapter(adapter);

}

第二种:通过Butten按钮跳转到系统的手机联系人界面,单个获取手机联系人信息,展示在ListView中

activity_contacts.xml布局:

xmlns:tools="http://schemas.android.com/tools"

android:id="@+id/activity_contacts"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context="com.example.android_25.ContactsActivity">

android:layout_width="match_parent"

android:layout_height="wrap_content">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="跳转到联系人页面"

android:id="@+id/b_tzcontacts"

/>

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:id="@+id/lv_contacts"

>

ContactsActivity类:

private Button b_tzcontacts;

private String phoneName;

private String phoneNumber;

private List> datalistView;

private ListView lv_contacts;

private SimpleAdapter adapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_contacts);

//获得跳转到联系人的id

b_tzcontacts =(Button) findViewById(R.id.b_tzcontacts);

//获得ListView的ID

lv_contacts =(ListView) findViewById(R.id.lv_contacts);

//定义一个接受联系人姓名和电话号码的集合

datalistView = new ArrayList<>();

//获取联系人的点击事件

b_tzcontacts.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

Intent intentPhone=new Intent(Intent.ACTION_PICK);

intentPhone.setData(ContactsContract.Contacts.CONTENT_URI);

startActivityForResult(intentPhone,0);

}

});

//R.layout.activity_xs就是上文的activity_xs布局问价

adapter = new SimpleAdapter(this, datalistView, R.layout.activity_xs,new String[]{"images","titles"},new int[]{R.id.tv_name,R.id.tv_telephone});

lv_contacts.setAdapter(adapter);

}

//获得返回的结果

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

switch (requestCode){

case 0:

if(resultCode== Activity.RESULT_OK){

Uri uri=data.getData();

Cursor cursor=managedQuery(uri,null,null,null,null);

cursor.moveToFirst();

String contactid=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));

//得到ContentResolver

ContentResolver contentResolver=getContentResolver();

Cursor phone=contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID+"="+contactid,null,null);

while (phone.moveToNext()){

//联系人

phoneName =phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));

//手机号码

phoneNumber =phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

//格式化手机号

phoneNumber = phoneNumber.replace("-","");

phoneNumber = phoneNumber.replace("","");

//将用户名和号码放入Map集合中

Map map=new HashMap<>();

map.put("images",phoneName);

map.put("titles",phoneNumber);

datalistView.add(map);

}

//刷新适配器

adapter.notifyDataSetChanged();

}

break;

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值