1、布局

主布局只有一个listview,用来显示电话簿的名字和手机号码
      1. <?xml version="1.0" encoding="utf-8"?>
      1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
      1. xmlns:tools="http://schemas.android.com/tools"
      1. android:layout_width="match_parent"
      1. android:layout_height="match_parent"
      1. tools:context="lpc.com.project1722.MainActivity">
      1. <ListView
      1. android:id="@+id/list"
      1. android:layout_width="match_parent"
      1. android:layout_height="match_parent">
      1. </ListView>
      1. </RelativeLayout>

布局2

listview的内容布局,只有两个TextView
    1. <?xml version="1.0" encoding="utf-8"?>
    1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    1. android:orientation="vertical" android:layout_width="match_parent"
    1. android:layout_height="match_parent">
    1. <ImageView
    1. android:background="#EE00"
    1. android:layout_width="match_parent"
    1. android:layout_height="1dp" />
    1. <TextView
    1. android:id="@+id/name"
    1. android:textSize="25sp"
    1. android:text="我是名字"
    1. android:layout_width="wrap_content"
    1. android:layout_height="wrap_content" />
    1. <TextView
    1. android:id="@+id/number"
    1. android:textSize="20sp"
    1. android:text="我是号码"
    1. android:layout_width="wrap_content"
    1. android:layout_height="wrap_content" />
    1. <ImageView
    1. android:background="#EE00"
    1. android:layout_width="match_parent"
    1. android:layout_height="1dp" />
    1. </LinearLayout>


2、java文件

    1. package lpc.com.project1722;
    1. import android.content.Intent;
    1. import android.database.Cursor;
    1. import android.net.Uri;
    1. import android.os.Bundle;
    1. import android.provider.ContactsContract;
    1. import android.support.v7.app.AppCompatActivity;
    1. import android.view.LayoutInflater;
    1. import android.view.View;
    1. import android.view.ViewGroup;
    1. import android.widget.AdapterView;
    1. import android.widget.BaseAdapter;
    1. import android.widget.ListView;
    1. import android.widget.TextView;
    1. import java.util.ArrayList;
    1. public class MainActivity extends AppCompatActivity {
    1. private ListView list;
    1. private ArrayList<String> nameList = new ArrayList<String>();
    1. private ArrayList<String> numberList = new ArrayList<String>();
    1. myAdapter adapter = new myAdapter();
    1. @Override
    1. protected void onCreate(Bundle savedInstanceState) {
    1. super.onCreate(savedInstanceState);
    1. setContentView(R.layout.activity_main);
    1. list = (ListView) findViewById(R.id.list);
    1. readContacts();
    1. list.setAdapter(adapter);
    1. list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    1. @Override
    1. public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    1. Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:"+ numberList.get(position)));
    1. startActivity(intent);
    1. }
    1. });
    1. }
    1. private void readContacts() {
    1. Cursor cursor = null;
    1. try{
    1. cursor = getContentResolver().query(
    1. ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
    1. null,null,null,"sort_key asc");
    1. //sort_key asc 这个排序是按照数字,A到Z的顺序排序
    1. //last_time_contacted 最后一次的通话时间,此时为根据通话时间排序
    1. while (cursor.moveToNext()){
    1. String displayName = cursor.getString(cursor.getColumnIndex(
    1. ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
    1. nameList.add(displayName);
    1. String number = cursor.getString(cursor.getColumnIndex(
    1. ContactsContract.CommonDataKinds.Phone.NUMBER));
    1. numberList.add(number);
    1. }
    1. }catch (Exception e){
    1. e.printStackTrace();
    1. }finally {
    1. cursor.close();
    1. }
    1. }
    1. class myAdapter extends BaseAdapter{
    1. public myAdapter() {
    1. }
    1. @Override
    1. public int getCount() {
    1. return nameList.size();
    1. }
    1. @Override
    1. public Object getItem(int position) {
    1. return position;
    1. }
    1. @Override
    1. public long getItemId(int position) {
    1. return position;
    1. }
    1. @Override
    1. public View getView(int position, View convertView, ViewGroup parent) {
    1. ViewHolder viewHolder;
    1. View view;
    1. view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.list_item, null);
    1. viewHolder = new ViewHolder();
    1. viewHolder.name = (TextView) view.findViewById(R.id.name);
    1. viewHolder.number = (TextView) view.findViewById(R.id.number);
    1. viewHolder.name.setText(nameList.get(position));
    1. viewHolder.number.setText(numberList.get(position));
    1. return view;
    1. }
    1. class ViewHolder {
    1. public TextView name;
    1. public TextView number;
    1. }
    1. }
    1. }

3、manifest设置

基本上是默认设置,只添加了一个读取 系统联系人的权限

    1. <?xml version="1.0" encoding="utf-8"?>
    1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    1. package="lpc.com.project1722">
    1. <uses-permission android:name="android.permission.READ_CONTACTS"/>
    1. <uses-permission android:name="android.permission.CALL_PHONE"/>
    1. <application
    1. android:allowBackup="true"
    1. android:icon="@mipmap/ic_launcher"
    1. android:label="@string/app_name"
    1. android:supportsRtl="true"
    1. android:theme="@style/AppTheme">
    1. <activity android:name=".MainActivity">
    1. <intent-filter>
    1. <action android:name="android.intent.action.MAIN" />
    1. <category android:name="android.intent.category.LAUNCHER" />
    1. </intent-filter>
    1. </activity>
    1. </application>
    1. </manifest>


通过系统自带的内容提供器(ContentResolver)读取系统的通讯录,并设置点击事件的更多相关文章

  1. android: 内容提供器简介

    我们学了 Android 数据持久化的技术,包括文件存储.SharedPreferences 存 储.以及数据库存储.不知道你有没有发现,使用这些持久化技术所保存的数据都只能在当 前应用程序中访问.虽 ...

  2. Android基础总结(6)——内容提供器

    前面学习的数据持久化技术包括文件存储.SharedPreferences存储以及数据库存储技术保存的数据都只能被当前应用程序所访问.虽然文件存储和SharedPreferences存储中提供了MODE ...

  3. android学习十二(android的Content Provider(内容提供器)的使用)

    文件存储和SharePreference存储以及数据存储一般为了安全,最好用于当前应用程序中訪问和存储数据.内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能 ...

  4. Android学习之基础知识十—内容提供器(Content Provider)

    一.跨程序共享数据——内容提供器简介 内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能 ...

  5. 入职小白随笔之Android四大组件——内容提供器详解(Content Provider)

    Content Provider 内容提供器简介 内容提供器(Content Provider)主要用于在不同的应用程序之间 实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的 ...

  6. Android入门(十三)内容提供器

    原文链接:http://www.orlion.ga/612/ 内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一 ...

  7. <Android基础> (七)内容提供器

    第七章 内容提供器 7.1 内容提供器(Content Provider) 主要应用于在不同的应用程序之间实现数据共享功能.允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全性. 7.2 ...

  8. 5、Android-跨程序共享数据--内容提供器

    Android数据持久化技术:文件存储.SharedPreferences存储.数据库存储 使用这些持久化技术保存的数据只能再当前的应用程序中访问 但是对于不同应用之间的可以实现跨程序数据共享的功能 ...

  9. 内容提供器(ContentProvider)

    一.简介内容提供器(Content Provider)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全性.目前,使 ...

随机推荐

  1. WinForm控件TreeView 只部分节点显示 CheckBox

    WinForm控件TreeView 只部分节点显示  CheckBox 用过asp.net的应该知道,要在treeview中实现上述功能可以使用ShowCheckBox 属性指定那些节点显示check ...

  2. FTP地址格式如下:“ftp://用户名:密码@FTP服务器IP”

    FTP地址格式如下:“ftp://用户名:密码@FTP服务器IP”

  3. mysql load data 乱码的问题

    新学mysql在用load data导入txt文档时发现导入的内容,select 之后是乱码,先后把表,数据库的字符集类型修改为utf8,但还是一样,最后在 http://bbs.chinaunix. ...

  4. Android自动化学习笔记:编写MonkeyRunner脚本的几种方式

    ---------------------------------------------------------------------------------------------------- ...

  5. Openstack Day1简介及虚拟环境搭建

    本文章仅作为作者本人存档记忆!恕不详细展开内容!   openstack kilo版本重要组件(module)简介 ======================================= Ke ...

  6. SQL计算时间差,要精确到小时分钟秒

    declare @starttime as datetime declare @endtime as datetime set @starttime = '2009-11-24 15:10:00' s ...

  7. crontab 提示 command not found 解决方案

    今天遇见一个问题,crontab的定时任务会报错:java command not found,但是手动执行脚本一直能成功. 猜想是环境变量的问题. 在crontab里添加个打印环境变量的任务: * ...

  8. Maximo-获取url

    //访问报表public void OPENREPORT() throws RemoteException, MXException{ int polineid=this.getMbo().getIn ...

  9. modelsim(3) - summary ,issue,tips

    1) the OEM of modelsim is 10 times slower than offical questa 2)how to the file full path in the mod ...

  10. NTFS u盘支持 - centos6

    uname -r bash-4.1# uname -r2.6.32-431.el6.x86_64 ---- http://repository.it4i.cz/mirrors/repoforge/re ...