app:
layout_constraintBottom_toBottomOf="parent"
android:
background="#"
android:
layout_width="match_parent"
android:
layout_height=""/>
import;
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
import
publicclassContactsActivityextendsAppCompatActivity{
privatestaticfinalintMY_PERMISSIONS_REQUEST_READ_CONTACTS=100;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
(savedInstanceState);
setContentView
if(this,!
=
||(this,!
={
(this,newString[]{MY_PERMISSIONS_REQUEST_READ_CONTACTS);
}else{
initList();
}
}
@Override
publicvoidonRequestPermissionsResult(intrequestCode,@NonNullString[]permissions,@NonNullint[]grantResults){
(requestCode,permissions,grantResults);
if(requestCode==MY_PERMISSIONS_REQUEST_READ_CONTACTS){
if>0&&grantResults[0]=={
initList();
}
}
}
privatevoidinitList(){
RecyclerViewrecyclerView=findViewById
ListcontactList=getContactList();
ContactsAdapteradapter=newContactsAdapter(contactList,this);
(adapter);
}
privateListgetContactList(){
ArrayListcontacts=newArrayList<>();
try(CursorcontactCursor=getContentResolver().querynull,null,null,null)){
if(contactCursor!
=null){
while()){
intid=
Stringname=
StringphoneNumber=
(newContact(id,name,phoneNumber));
}
}
}catch(SecurityExceptione){
();
}
returncontacts;
}
privateclassContactsAdapterextends<>{
ArrayListdata=newArrayList<>();
privateLayoutInflaterinflater;
ContactsAdapter(Listdata,Contextcontext){
=(context);
}
@NonNull
@Override
publicContactsViewHolderonCreateViewHolder(@NonNullViewGroupviewGroup,inti){
returnnewContactsViewHolderviewGroup,false));
}
@Override
publicvoidonBindViewHolder(@NonNullContactsViewHoldercontactsViewHolder,inti){
finalContactcontact=(i);
finalTextViewname=
TextViewphone=
;
;
(){
@Override
publicvoidonClick(Viewv){
finalBottomSheetDialogdialog=newBottomSheetDialog;
("选择操作");
Viewview=null,false);
(){
@Override
publicvoidonClick(Viewv){
if,!
={
"没有拨打电话的权限",.show();
();
return;
}
Intentintent=newIntent,("tel:
"+);
();
}
});
(){
@Override
publicvoidonClick(Viewv){
Intentintent=newIntent,("smsto:
"+);
startActivity(intent);
}
});
(){
@Override
publicvoidonClick(Viewv){
();
}
});
(view);
();
}
});
}
@Override
publicintgetItemCount(){
return();
}
classContactsViewHolderextends{
ContactsViewHolder(@NonNullViewitemView){
super(itemView);
}
}
}
classContact{
Contact(intid,Stringname,Stringphone){
=id;
=name;
=phone;
}
intid;
Stringname;
Stringphone;
}
}
3.实验过程产生的主要问题及解决办法
读取通讯录的权限不仅在AndroidManifest中申请就行,还需要再程序运行时显式的向用户申请,通过检查是否持有权限,通过申请权限,最后在onRequestPermissionsResult中接收申请权限的结果