本文已参与「新人创作礼」活动,一起开启掘金创作之路。
原理描述
- android中获取手机联系人是通过 ContentResolver类实现的
- ContentResolver是用来提供android开发者对系统应用及其他应用的数据库进行解析的,通过特定的Uri访问相应的数据库。
- 进而获取系统应用或者其他应用的应用数据,获取android手机联系人的URL是Phone.CONTENT_URI
- Phone类提供了很多获取手机联系人的数据库的URI,Phone.CONTENT_URI是手机联系人的根Uri。
AndroidManifest.xml
- 需要添加获取手机联系人权限
- 不要忘记添加权限, 如果没有添加动态申请权限的话,可以去设置里面手动打开
- 在Android6.0以后我们需要手动去获取权限,在下面程序中已经加入
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.CALL_PHONE" />
xml.java构想
- 主要就是垂直线性布局,里面放2个TextView和1个Button按钮
MainActivity.java代码
public class MainActivity extends AppCompatActivity {
private Cursor cursor;
private TextView text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
text = findViewById(R.id.text);
}
public void btn(View view) {
try{
ContentResolver contentResolver = getContentResolver();
Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
cursor = contentResolver.query(uri, null, null, null,null);
text.setText("");
while (cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
text.append("姓名:"+name+" ");
text.append("电话号码:"+number);
text.append("\n");
}
cursor.close();
}catch (Exception ignore){
Toast.makeText(getApplicationContext(),"",Toast.LENGTH_SHORT).show();
}
}
}
设计效果图
- 刚进入APP
- 点击按钮显示手机里的联系人和电话
- 手机内存的联系人