首页 > 系统 > Android > 正文

Android 获取联系人列表

2019-11-09 17:29:33
字体:
来源:转载
供稿:网友

首先,先看看运行效果 这里写图片描述 1.增加权限

<!-- 读取联系人权限 --> <uses-permission android:name="android.permission.READ_CONTACTS"/> <!-- 拨打电话权限 --> <uses-permission android:name="android.permission.CALL_PHONE"/>

2.新建一个实体类 PhoneDto.java

public class PhoneDto { PRivate String name; //联系人姓名 private String telPhone; //电话号码 public String getName() { return name; } public void setName(String name) { this.name = name; } public String getTelPhone() { return telPhone; } public void setTelPhone(String telPhone) { this.telPhone = telPhone; } public PhoneDto() { } public PhoneDto(String name, String telPhone) { this.name = name; this.telPhone = telPhone; }}

3.建立工具类获得联系人 PhoneUtil.java

public class PhoneUtil { // 号码 public final static String NUM = ContactsContract.CommonDataKinds.Phone.NUMBER; // 联系人姓名 public final static String NAME = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME; //上下文对象 private Context context; //联系人提供者的uri private Uri phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; public PhoneUtil(Context context){ this.context = context; } //获取所有联系人 public List<PhoneDto> getPhone(){ List<PhoneDto> phoneDtos = new ArrayList<>(); ContentResolver cr = context.getContentResolver(); Cursor cursor = cr.query(phoneUri,new String[]{NUM,NAME},null,null,null); while (cursor.moveToNext()){ PhoneDto phoneDto = new PhoneDto(cursor.getString(cursor.getColumnIndex(NAME)),cursor.getString(cursor.getColumnIndex(NUM))); phoneDtos.add(phoneDto); } return phoneDtos; }}

4.建立布局 activity_main.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.zking.getphone.MainActivity"> <ListView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/lv_main_list"></ListView></LinearLayout>

效果:这里写图片描述

最后初始化界面 MainActivity.java

public class MainActivity extends AppCompatActivity { private List<PhoneDto> phoneDtos; private ListView lv_main_list; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); } private void initViews() { PhoneUtil phoneUtil = new PhoneUtil(this); phoneDtos = phoneUtil.getPhone(); lv_main_list = (ListView) findViewById(R.id.lv_main_list); MyAdapter myAdapter = new MyAdapter(); lv_main_list.setAdapter(myAdapter); //给listview增加点击事件 lv_main_list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //拨打电话 Intent intent = new Intent(); intent.setAction("android.intent.action.CALL"); intent.addCategory(Intent.CATEGORY_DEFAULT); intent.setData(Uri.parse("tel:"+phoneDtos.get(position).getTelPhone())); startActivity(intent); } }); } //自定义适配器 private class MyAdapter extends BaseAdapter{ @Override public int getCount() { return phoneDtos.size(); } @Override public Object getItem(int position) { return phoneDtos.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { PhoneDto phoneDto = phoneDtos.get(position); LinearLayout linearLayout = new LinearLayout(MainActivity.this); LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(0,LinearLayout.LayoutParams.WRAP_CONTENT); layoutParams.weight = 1; TextView tv_name = new TextView(MainActivity.this); tv_name.setId(View.generateViewId()); tv_name.setLayoutParams(layoutParams); tv_name.setText(phoneDto.getName()); TextView tv_num = new TextView(MainActivity.this); tv_num.setId(View.generateViewId()); tv_num.setLayoutParams(layoutParams); tv_num.setText(phoneDto.getTelPhone()); linearLayout.addView(tv_name); linearLayout.addView(tv_num); return linearLayout; } }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表