利用Content provide获取电话联系人并显示在listview

利用Content provide轻松的获取电话联系人,并显示在listview,如下代码:

ackage com.example.contentprovidetest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.os.Build;
import android.provider.ContactsContract;
import android.provider.ContactsContract.PhoneLookup;
public class MainActivity extends Activity {
 //定义列表视图
 ListView listView;
 //定义 adapter
 ArrayAdapter<String> adapter;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  TextView tv = new TextView(this);
  //创建Content provide对象
  ContentResolver cr = getContentResolver();
  //定义通讯录查询集
  Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
    null, null, null);
  // 新建数组,长度为电话联系人个数
  String[] arstr = new String[cursor.getCount()];
  //临时变量
  int j = 0;
  //遍历查询结果集
  while (cursor.moveToNext()) {
   //获取结果集DISPLAY_NAME列的列索引
   int nameColumIndex = cursor
     .getColumnIndex(PhoneLookup.DISPLAY_NAME);
   String name = cursor.getString(nameColumIndex);
   //获取DISPLAY_NAME列的值
   // str=str+name;
   String str = name;
   //根据联系人的ID(唯一),查询此人有多少号码
   String contactId = cursor.getString(cursor
     .getColumnIndex(ContactsContract.Contacts._ID));
   Cursor phone = cr.query(
     ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
     ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "="
       + contactId, null, null);
   //遍历电话表的结果集
   while (phone.moveToNext()) {
    //获取电话号码
    String strPhoneNumber = phone
      .getString(phone
        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    //获取号码类型
    String phTypes = phone
      .getString(phone
        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
    int i = Integer.parseInt(phTypes);
    //根据类型确定显示字段
    switch (i) {
    case 1:
     phTypes = "home";
     break;
    case 2:
     phTypes = "mobile";
     break;
    case 3:
     phTypes = "work";
     break;
    default:
     phTypes = "ohter";
     break;
    }
    //联系人、电话类型、电话
    str = str + "\n    " + phTypes + ":" + strPhoneNumber;
   }
             //以一个人的联系人、电话类型、电话为一个字符串,保存到数组
   arstr[j] = str + "\n";
   j++;
         //关闭电话集
   phone.close();
  }
  //关闭查询集
  cursor.close();
        //由数组建立list目录
  List list = new ArrayList<>(Arrays.asList(arstr));
  //实例化adapter
  adapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_list_item_1, list);
  listView = new ListView(this);
  // 将adapter适配器置入ListView
  listView.setAdapter(adapter);
  // 设置默认布局为ListView
  setContentView(listView);
 }
}

编译后运行,你可看到你的所有联系人及电话。建议放在线程读取后再显示更好
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaozenbin

谢谢你的肯定

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值