• Android连载38-访问联系人


    一、读取手机中的联系人

    • 由于使用模拟器,我们首先创建几个联系人再进行读取
      38.1
    • 然后创建一个项目ContactsTest,修改activity_main.xml
    <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" >
    
        <ListView
            android:id="@+id/contacts_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent" >
            
        </ListView>
    
    </LinearLayout>
    
    • 里面先放一个列表,然后我们修改MainActivity.java的代码
    package com.example.contactstest;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.app.Activity;
    import android.database.Cursor;
    import android.os.Bundle;
    import android.provider.ContactsContract;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    
    public class MainActivity extends Activity {
    	
    	ListView contactsView;
    	
    	ArrayAdapter<String> adapter;
    	
    	List<String> contactsList = new ArrayList<String>();
    	
    	@Override
    	protected void onCreate(Bundle savedInstanceState) {
    		super.onCreate(savedInstanceState);
    		contactsView = (ListView) findViewById(R.id.contacts_view);
    		adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,contactsList);
    		readContacts();
    		
    	}
    	
    	private void readContacts() {
    		Cursor cursor = null;
    		try {
    			//查询联系人
    			cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);
    			while(cursor.moveToNext()) {
    				//获取联系人
    				String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
    				String number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
    				contactsList.add(displayName + "
    " + number);
    			}
    		}catch(Exception e) {
    			e.printStackTrace();
    		}finally {
    			if(cursor != null) {
    				cursor.close();
    			}
    		}
    	}
    }
    
    • 接下来我们解析这个类
    • 在onCreate方法中,首先获取了ListView控件的实例,并且给它设置好了适配器。
    • 然后调用了readContacts方法,首先使用了ContentResolver的query()方法来查询系统的联系人信息,不过传入的Uri参数没有用Uri.parse()方法去解析,这是因为ContactsContrace.CommonDataKinds.Phone类已经帮我们做好了封装,提供给了一个CONTENT_URI常量,而这个常量就是用Uri.parse()方法解析出来的,接着哦我们对cursor进行遍历,将联系人和手机号这些数据逐个取出,Uri常量就是程序中的那一串,数据取出之后进行拼接,然后添加到ListView中,最后关闭cursor.
    • 还有一点,读取系统的联系人是需要权限的,因此需要修改AndoridManifest.xml文件
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.example.contactstest"
        android:versionCode="1"
        android:versionName="1.0" >
    
        <uses-sdk
            android:minSdkVersion="14"
            android:targetSdkVersion="19" />
    
        <uses-permission android:name="android.permission.READ_CONTACTS" />
    ...........
    </manifest>
    

    二、源码:

  • 相关阅读:
    解决VSCode黑屏和终端空白无法输入的问题
    source map文件还原
    npm下载很慢的解决办法
    清理sqlserver2014的日志
    浏览器横向打印
    Vue3 diff的最长递增子序列 算法详解
    白话科普系列——网站靠什么提升加载速度?
    微服务架构下 CI/CD 如何落地
    网骗欺诈?网络裸奔?都是因为 HTTP?
    有赞统一接入层架构演进
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/13818258.html
Copyright © 2020-2023  润新知