成品图
1.创建ContactInfo.java文件
public class ContactInfo {
private int id;
private String name;
private String phone;
public ContactInfo(int id,String name,String phone){
this.id=id;
this.name=name;
this.phone=phone;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setPhone(String phone) {
this.phone = phone;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getPhone() {
return phone;
}
}
2.在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:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="cn.itcast.readcontact.MainActivity">
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
>
</ListView>
<Button
android:id="@+id/refresh"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="点击刷新">
</Button>
</LinearLayout>
3.创建item_contact.xml文件在layout下
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:text="姓名:Sun xuan"
android:textSize="20sp"
android:textColor="@color/black"/>
<TextView
android:id="@+id/phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:textSize="20sp"
android:layout_marginStart="15dp"
android:text="电话:2123324"/>
</LinearLayout>
4.创建ContactAdapter.java文件为每一列设置名字和电话
import android.annotation.SuppressLint;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.example.readcontact.R;
import java.util.List;
/**
* Created by ziye on 2022/3/30.
*/
public class ContactAdapter extends ArrayAdapter{
private final int resourceId;
public ContactAdapter(Context context, int textViewResourceId, List<ContactInfo> objects) {
super(context, textViewResourceId, objects);
resourceId = textViewResourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ContactInfo contactInfo = (ContactInfo) getItem(position); // 获取当前项的Fruit实例
@SuppressLint("ViewHolder") View view = LayoutInflater.from(getContext()).inflate(resourceId, null);//实例化一个对象
TextView name =view.findViewById(R.id.name);//获取该布局内的文本视图
TextView phone =view.findViewById(R.id.phone);//获取该布局内的文本视图
name.setText(contactInfo.getName());
phone.setText(contactInfo.getPhone());//为文本视图设置文本内容
return view;
}
}
5.完成MainActivity.java文件,进行启动
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import android.Manifest;
import android.annotation.SuppressLint;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.view.View;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import com.example.readcontact.R;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List<ContactInfo> contactInfos ;
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init(){
contactInfos = new ArrayList<ContactInfo>();
Button button=findViewById(R.id.refresh);
ContactInfo contactInfo=new ContactInfo(0,"欢迎进入","点击刷新获取数据");
contactInfos.add(contactInfo);
listView = findViewById(R.id.list);
ContactAdapter adapter = new ContactAdapter(MainActivity.this, R.layout.item_contact, contactInfos);
listView.setAdapter(adapter);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.READ_CONTACTS},1);
}
});
}
private void getContact() {
contactInfos = new ArrayList<ContactInfo>();
ContactInfo contactInfo1=new ContactInfo(0,"欢迎使用","点击刷新更新数据");
contactInfos.add(contactInfo1);
String[] cols = {ContactsContract.PhoneLookup.DISPLAY_NAME, ContactsContract.CommonDataKinds.Phone.NUMBER};
@SuppressLint("Recycle") Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
cols, null, null, null);
for (int i = 0; i < cursor.getCount(); i++) {
cursor.moveToPosition(i);
// 取得联系人名字
int nameFieldColumnIndex = cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME);
int numberFieldColumnIndex = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
String name = "name: "+cursor.getString(nameFieldColumnIndex);
String number = "phone: "+cursor.getString(numberFieldColumnIndex);
ContactInfo contactInfo=new ContactInfo(i+2,name,number);
contactInfos.add(contactInfo);
}
listView = findViewById(R.id.list);
ContactAdapter adapter = new ContactAdapter(MainActivity.this, R.layout.item_contact, contactInfos);
listView.setAdapter(adapter);
}
@Override
public void onRequestPermissionsResult(int requestCode,String[] permissions,int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode==1){
for (int i = 0; i < permissions.length; i++) {
if (grantResults[i]== PackageManager.PERMISSION_GRANTED) {
getContact();
}else {
Toast.makeText(this,"权限"+""+permissions[i]+"申请失败",Toast.LENGTH_SHORT).show();
}
}
}
}
}
6.在AndroidMainfest.xml插入,如果没有数据,可能是没有联系人
<uses-permission android:name="android.permission.READ_CONTACTS" />