Android利用ContentReslover和动态权限获取手机联系人的案例.TXT

    xiaoxiao2021-03-25  134

    思路步骤: ①新建项目或者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());//把int型的ID转为String类型 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)); //获取ID 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

    最新回复(0)