思路步骤:
①新建项目或者
Module,在manifest文件中添加读取联系人的权限
②创建一个实体类,用来储存从内存中读取出来的单个的联系人信息
③自定义显示布局样式
④自定义adapter,定义三个属性:
上下文对象
Context,
数据源
List<自定义实体类>,
布局加载器LayoutInflater,
加载自定义布局,初始化自定义布局中的控件,给他们赋值
⑤在MainAcvitity中实例化自身布局文件中的控件
初始化数据,创建获取联系人的方法并且重写onRequestPermissionsResult方法(需要动态获取权限)
自定义adapter
public class MessageAdapter extends BaseAdapter {
private Context context;
private List<Contact> list;
private LayoutInflater inflater;
public MessageAdapter(Context context, List<Contact> list) {
this.context = context;
this.list = list;
inflater=LayoutInflater.from(context);
}
public void setList(List<Contact> list) {
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object
getItem(
int position) {
return list.get(position);
}
@Override
public long getItemId(
int position) {
return position;
}
@Override
public View
getView(
int position, View convertView, ViewGroup parent) {
ViewHolder holder=
null;
if (convertView==
null) {
holder=
new ViewHolder();
convertView=inflater.inflate(R.layout.contact_item,parent,
false);
holder.tv_id= (TextView) convertView.findViewById(R.id.tv_id);
holder.tv_name= (TextView) convertView.findViewById(R.id.tv_name);
holder.tv_number= (TextView) convertView.findViewById(R.id.tv_number);
convertView.setTag(holder);
}
else {
holder= (ViewHolder) convertView.getTag();
}
Contact contact= (Contact) getItem(position);
holder.tv_id.setText(String.valueOf(contact.getId()).toString());
holder.tv_name.setText(contact.getName().toString());
holder.tv_number.setText(contact.getPhone_number().toString());
return convertView;
}
class ViewHolder{
private TextView tv_id,tv_name,tv_number;
}
MainAcvitity。Java
public class MainActivity extends AppCompatActivity {
private Button btn_getContact;
private ListView lv_message;
private static final int REQUEST_CODE=
1;
private List<Contact> contacts=
new ArrayList<>();
private MessageAdapter adapter=
null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
getContacts();
}
private void initView(){
btn_getContact= (Button) findViewById(R.id.btn_getContact);
lv_message= (ListView) findViewById(R.id.lv_message);
btn_getContact.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
if(ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_CONTACTS)!=
PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(MainActivity.
this,
new String[]{Manifest.permission.READ_CONTACTS},REQUEST_CODE);
}
else {
contacts=getContacts();
adapter=
new MessageAdapter(MainActivity.
this,contacts);
lv_message.setAdapter(adapter);
}
}
});
}
private List<Contact>
getContacts(){
List<Contact> list=
new ArrayList<>();
String[] colums={ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.CONTACT_ID};
Cursor cursor=getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,colums,
null,
null,
null);
if(cursor!=
null){
while (cursor.moveToNext()){
String phoneNum=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
if(TextUtils.isEmpty(phoneNum)){
continue;
}
String name=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
int id=cursor.getInt(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
list.add(
new Contact(id,name,phoneNum));
}
cursor.close();
}
return list;
}
@Override
public void onRequestPermissionsResult(
int requestCode, @NonNull String[] permissions, @NonNull
int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode==REQUEST_CODE){
if(grantResults[
0]==PackageManager.PERMISSION_GRANTED){
contacts=getContacts();
adapter.notifyDataSetChanged();
adapter=
new MessageAdapter(
this,contacts);
}
else {
Toast.makeText(
this,
"请开启权限",Toast.LENGTH_SHORT).show();
}
}
}
转载请注明原文地址: https://ju.6miu.com/read-4957.html