前言
在学习 Android开发 时内容提供者老师讲的不是很全,讲的很快,那时候就很 烦躁,后来想着这块内容还是比较重要的。于是回过头来,慢慢沉下心来就感觉不是很难。在网上摸索了许久,整理了一下,写出了下面的比较详细的代码。 如有不足之处请指正
MainActivity.java
import androidx.appcompat.app.AppCompatActivity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.View;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private List<Map<String, Object>> contactList = new ArrayList<>(); // 存储列表 --以map对象为list对象的子元素
private ListView lv_main_listview; // 创建listview对象
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 绑定listview对象
lv_main_listview = findViewById(R.id.lv_main_listview);
}
// 单击事件
public void get_info(View view) {
int id = 1;
// 通过游标查询获取 电话uri对象
Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext()) {
// 通过获取的uri对象进行 匹配获取
String name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
Log.v("test ----- :", number + name);
// 新建 map 对象
Map<String, Object> map = new HashMap<String, Object>();
// 存入 “key”,"values"
map.put("id", id);
map.put("name", name);
map.put("tel", number);
contactList.add(map);
id += 1;
}
// 适配器生成
SimpleAdapter simpleAdapter = new SimpleAdapter(this, contactList, R.layout.simple_listview, new String[]{"id", "name", "tel"}, new int[]{R.id.tv_items_id, R.id.tv_items_name, R.id.tv_items_tel});
// 适配器设置
lv_main_listview.setAdapter(simpleAdapter);
}
}
activity_main
<?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=".MainActivity">
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="适配器"
android:textSize="32dp" />
<ListView
android:id="@+id/lv_main_listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</ListView>
<Button
android:id="@+id/btn_get"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="get_info"
android:text="获取联系人" />
</LinearLayout>
AndroidManifest
加入权限
<uses-permission android:name="android.permission.READ_CONTACTS"/>
其它页面
<?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/tv_items_id"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView
android:id="@+id/tv_items_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView
android:id="@+id/tv_items_tel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>