青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

life02

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  197 隨筆 :: 3 文章 :: 37 評論 :: 0 Trackbacks
Android軟件開發之獲取通訊錄聯系人信息(十二)
http://www.uml.org.cn/mobiledev/201110121.asp
 

發布于2011-10-12

 

圖中選中的數據庫 contacts2.db就是系統儲存聯系人的數據庫,我們將它打開看看里面儲存了些什么東東?

打開contacts.db后 發面里面有一堆表,同學們先別慌張。今天我們主要討論紅框內的4個比較常用的表,后期我在介紹其它表的使用。這里說一下如果你想在真機上查看數據庫的話必需要先獲得root權限,否則無法查看。

1.contacts 表

_id :表的ID,主要用于其它表通過contacts 表中的ID可以查到相應的數據。

display_name: 聯系人名稱

photo_id:頭像的ID,如果沒有設置聯系人頭像,這個字段就為空

times_contacted:通話記錄的次數

last_time_contacted: 最后的通話時間

lookup :是一個持久化的儲存 因為用戶可能會改名子 但是它改不了lookup

2.data表

raw_contact_id:通過raw_contact_id可以找到 raw_contact表中相對的數據。

data1 到 data15 這里保存著聯系人的信息 聯系人名稱 聯系人電話號碼 電子郵件 備注 等等。

3.phone_look_up表

data_id : 通過data_id可以找到 datat表中相對的數據。

raw_contact_id : 通過raw_contact_id 可以找到 raw_contact_表中相對的數據。

normalized_number: 這個字段就比較有意思了,它是將每個電話號碼逆序排列。

4.raw_contact表

version :版本號,用于監聽變化

deleted :刪除標志, 0為默認 1 表示這行數據已經刪除

display_name : 聯系人名稱

last_time_contacts : 最后聯系的時間

有關這些的源碼都在android.provider.ContactsContract這個類里面,如果想深入了解的話 可以去看看,數據庫相關的操作 聯查啊 啥的 都在里面。

下面說說代碼是怎么用的

先說說 Phone.CONTENT_URI,獲取聯系人的時候需要去這個url中去找數據 。它所指向的其實是“content:// com.android.contacts/data/phones”。這個url 對應著contacts表 和 raw_contacts表 以及 data表 所以說我們的數據都是從這三個表中獲取的。

這里強調一下query第二個參數

private static final String[] PHONES_PROJECTION = new String[] {

    Phone.DISPLAY_NAME, Phone.NUMBER, Photo.PHOTO_ID,Phone.CONTACT_ID };

它的意思是只去表中找 顯示名稱 電話號碼 頭像ID 聯系人ID 這4個數據 ,如果你須要其它數據 的話 就須要修改這里。

獲得手機通訊錄聯系人信息

/**得到手機通訊錄聯系人信息**/  

   private void getPhoneContacts() {  

ContentResolver resolver = mContext.getContentResolver();  

// 獲取手機聯系人  

Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,PHONES_PROJECTION, null, null, null);  

if (phoneCursor != null) {  

    while (phoneCursor.moveToNext()) {  

    //得到手機號碼  

    String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);  

    //當手機號碼為空的或者為空字段 跳過當前循環  

    if (TextUtils.isEmpty(phoneNumber))  

        continue;  

    //得到聯系人名稱  

    String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX);  

    //得到聯系人ID  

    Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID_INDEX);  

    //得到聯系人頭像ID  

    Long photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX);  

    //得到聯系人頭像Bitamp  

    Bitmap contactPhoto = null;  

    //photoid 大于0 表示聯系人有頭像 如果沒有給此人設置頭像則給他一個默認的  

    if(photoid > 0 ) {  

        Uri uri =ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,contactid);  

        InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(resolver, uri);  

        contactPhoto = BitmapFactory.decodeStream(input);  

    }else {  

        contactPhoto = BitmapFactory.decodeResource(getResources(), R.drawable.contact_photo);  

    }  

    mContactsName.add(contactName);  

    mContactsNumber.add(phoneNumber);  

    mContactsPhonto.add(contactPhoto);  

    }  

    phoneCursor.close();  

}  

   }  

獲得手機sim卡聯系人信息

sim卡和手機本人 獲取的方式類似 只是url有點不一樣 ,須要注意的一點是 sim卡 是沒有聯系人頭像的。

 /**得到手機SIM卡聯系人人信息**/  

   private void getSIMContacts() {  

ContentResolver resolver = mContext.getContentResolver();  

// 獲取Sims卡聯系人  

Uri uri = Uri.parse("content://icc/adn");  

Cursor phoneCursor = resolver.query(uri, PHONES_PROJECTION, nullnull,  

    null);  

if (phoneCursor != null) {  

    while (phoneCursor.moveToNext()) {  

  

    // 得到手機號碼  

    String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);  

    // 當手機號碼為空的或者為空字段 跳過當前循環  

    if (TextUtils.isEmpty(phoneNumber))  

        continue;  

    // 得到聯系人名稱  

    String contactName = phoneCursor  

        .getString(PHONES_DISPLAY_NAME_INDEX);  

    //Sim卡中沒有聯系人頭像 

    mContactsName.add(contactName);  

    mContactsNumber.add(phoneNumber);  

    }  

    phoneCursor.close();  

}  

   } 

這個界面就可以看到聯系人的 名稱 號碼 以及頭像了。如果想在模擬器上看須要將圖片拷貝到SD卡中,然后在聯系人中設置一下,這里就可以看到頭像了,或者 真機上會比較清楚、

任意點擊一個聯系人會調用系統撥打電話的界面 ,代碼如下。

//調用系統方法撥打電話  

Intent dialIntent = new Intent(Intent.ACTION_CALL, Uri  

    .parse("tel:" + mContactsNumber.get(position)));  

startActivity(dialIntent); 

最重要的是須要AndroidManifest.xml中 加入權限 否則代碼會報錯的。 千萬別忘了。

<!-- 讀取聯系人權限 -->   

<uses-permission android:name="android.permission.READ_CONTACTS"/>  

<!-- 撥打電話權限 -->  

<uses-permission android:name="android.permission.CALL_PHONE"/> 

下面給出完整的代碼

import java.io.InputStream;  

import java.util.ArrayList;  

import android.app.ListActivity;  

import android.content.ContentResolver;  

import android.content.ContentUris;  

import android.content.Context;  

import android.content.Intent;  

import android.database.Cursor;  

import android.graphics.Bitmap;  

import android.graphics.BitmapFactory;  

import android.net.Uri;  

import android.os.Bundle;  

import android.provider.ContactsContract;  

import android.provider.ContactsContract.CommonDataKinds.Phone;  

import android.provider.ContactsContract.CommonDataKinds.Photo;  

import android.text.TextUtils;  

import android.view.LayoutInflater;  

import android.view.View;  

import android.view.ViewGroup;  

import android.widget.AdapterView;  

import android.widget.BaseAdapter;  

import android.widget.ImageView;  

import android.widget.ListView;  

import android.widget.TextView;  

import android.widget.AdapterView.OnItemClickListener;  

public class ContactsActivity extends ListActivity {  

    Context mContext = null;  

    /**獲取庫Phon表字段**/  

    private static final String[] PHONES_PROJECTION = new String[] {  

        Phone.DISPLAY_NAME, Phone.NUMBER, Photo.PHOTO_ID,Phone.CONTACT_ID };  

    /**聯系人顯示名稱**/  

    private static final int PHONES_DISPLAY_NAME_INDEX = 0;  

    /**電話號碼**/  

    private static final int PHONES_NUMBER_INDEX = 1;  

    /**頭像ID**/  

    private static final int PHONES_PHOTO_ID_INDEX = 2;  

    /**聯系人的ID**/  

    private static final int PHONES_CONTACT_ID_INDEX = 3;  

    /**聯系人名稱**/  

    private ArrayList<String> mContactsName = new ArrayList<String>();  

    /**聯系人頭像**/  

    private ArrayList<String> mContactsNumber = new ArrayList<String>();  

    /**聯系人頭像**/  

    private ArrayList<Bitmap> mContactsPhonto = new ArrayList<Bitmap>();  

    ListView mListView = null;  

    MyListAdapter myAdapter = null;  

    @Override  

    public void onCreate(Bundle savedInstanceState) {  

    mContext = this;  

    mListView = this.getListView();  

    /**得到手機通訊錄聯系人信息**/  

    getPhoneContacts();  

    myAdapter = new MyListAdapter(this);  

    setListAdapter(myAdapter);  

    mListView.setOnItemClickListener(new OnItemClickListener() {  

        @Override  

        public void onItemClick(AdapterView<?> adapterView, View view,  

            int position, long id) {  

        //調用系統方法撥打電話  

        Intent dialIntent = new Intent(Intent.ACTION_CALL, Uri  

            .parse("tel:" + mContactsNumber.get(position)));  

        startActivity(dialIntent);  

        }  

    });  

    super.onCreate(savedInstanceState);  

    }  

    /**得到手機通訊錄聯系人信息**/  

    private void getPhoneContacts() {  

    ContentResolver resolver = mContext.getContentResolver();  

    // 獲取手機聯系人  

    Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,PHONES_PROJECTION, nullnullnull);  

    if (phoneCursor != null) {  

        while (phoneCursor.moveToNext()) {  

        //得到手機號碼  

        String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);  

        //當手機號碼為空的或者為空字段 跳過當前循環  

        if (TextUtils.isEmpty(phoneNumber))  

            continue

        //得到聯系人名稱  

        String contactName = phoneCursor.getString(PHONES_DISPLAY_NAME_INDEX);  

        //得到聯系人ID  

        Long contactid = phoneCursor.getLong(PHONES_CONTACT_ID_INDEX);  

        //得到聯系人頭像ID  

        Long photoid = phoneCursor.getLong(PHONES_PHOTO_ID_INDEX);  

        //得到聯系人頭像Bitamp  

        Bitmap contactPhoto = null;  

        //photoid 大于0 表示聯系人有頭像 如果沒有給此人設置頭像則給他一個默認的  

        if(photoid > 0 ) {  

            Uri uri =ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI,contactid);  

            InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(resolver, uri);  

            contactPhoto = BitmapFactory.decodeStream(input);  

        }else {  

            contactPhoto = BitmapFactory.decodeResource(getResources(), R.drawable.contact_photo);  

        }  

        mContactsName.add(contactName);  

        mContactsNumber.add(phoneNumber);  

        mContactsPhonto.add(contactPhoto);  

        }  

        phoneCursor.close();  

    }  

    }  

    /**得到手機SIM卡聯系人人信息**/  

    private void getSIMContacts() {  

    ContentResolver resolver = mContext.getContentResolver();  

    // 獲取Sims卡聯系人  

    Uri uri = Uri.parse("content://icc/adn");  

    Cursor phoneCursor = resolver.query(uri, PHONES_PROJECTION, nullnull,  

        null);  

    if (phoneCursor != null) {  

        while (phoneCursor.moveToNext()) {  

        // 得到手機號碼  

        String phoneNumber = phoneCursor.getString(PHONES_NUMBER_INDEX);  

        // 當手機號碼為空的或者為空字段 跳過當前循環  

        if (TextUtils.isEmpty(phoneNumber))  

            continue;  

        // 得到聯系人名稱  

        String contactName = phoneCursor  

            .getString(PHONES_DISPLAY_NAME_INDEX);  

        //Sim卡中沒有聯系人頭像  

        mContactsName.add(contactName);  

        mContactsNumber.add(phoneNumber);  

        }  

        phoneCursor.close();  

    }  

    }  

    class MyListAdapter extends BaseAdapter {  

    public MyListAdapter(Context context) {  

        mContext = context;  

    }  

    public int getCount() {  

        //設置繪制數量  

        return mContactsName.size();  

    }  

    @Override  

    public boolean areAllItemsEnabled() {  

        return false;  

    }  

    public Object getItem(int position) {  

        return position;  

    }  

    public long getItemId(int position) {  

        return position;  

    }  

    public View getView(int position, View convertView, ViewGroup parent) {  

        ImageView iamge = null;  

        TextView title = null;  

        TextView text = null;  

        if (convertView == null) {  

        convertView = LayoutInflater.from(mContext).inflate(  

            R.layout.colorlist, null);  

        iamge = (ImageView) convertView.findViewById(R.id.color_image);  

        title = (TextView) convertView.findViewById(R.id.color_title);  

        text = (TextView) convertView.findViewById(R.id.color_text);  

        }  

        //繪制聯系人名稱  

        title.setText(mContactsName.get(position));  

        //繪制聯系人號碼  

        text.setText(mContactsNumber.get(position));  

        //繪制聯系人頭像  

        iamge.setImageBitmap(mContactsPhonto.get(position));  

        return convertView;  

    }  

    }  

}  

列表的布局文件

<?xml version="1.0" encoding="utf-8"?>    

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    

    android:layout_width="fill_parent" android:layout_height="wrap_content">    

    <ImageView android:id="@+id/color_image"    

        android:layout_width="40dip" android:layout_height="40dip" />    

    <TextView android:id="@+id/color_title"    

        android:layout_width="fill_parent" android:layout_height="wrap_content"    

        android:layout_toRightOf="@+id/color_image"    

        android:layout_alignParentBottom="true"    

        android:layout_alignParentRight="true" android:singleLine="true"    

        android:ellipsize="marquee"     

        android:textSize="15dip"  />    

    <TextView android:id="@+id/color_text"    

        android:layout_width="fill_parent" android:layout_height="wrap_content"    

        android:layout_toRightOf="@+id/color_image"    

        android:layout_below="@+id/color_title"    

        android:layout_alignParentBottom="true"    

        android:layout_alignParentRight="true"     

        android:singleLine="true"    

        android:ellipsize="marquee"     

        android:textSize="20dip" />    

</RelativeLayout>

posted on 2011-12-08 11:30 life02 閱讀(2266) 評論(0)  編輯 收藏 引用 所屬分類: Android開發
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区福利视频| 激情文学综合丁香| 香蕉久久夜色| 午夜精品久久久久久久久久久久| 99视频有精品| 午夜视频在线观看一区二区三区| 午夜在线精品偷拍| 久久久久国产精品一区| 免费日韩av| 欧美色播在线播放| 国产日韩欧美精品综合| 国模大胆一区二区三区| 在线欧美不卡| 一区二区三区.www| 久久av最新网址| 欧美激情片在线观看| 一区二区三区 在线观看视频| 亚洲一区二区3| 久久琪琪电影院| 欧美日韩亚洲一区二区| 国产区精品视频| 亚洲激情综合| 久久国产精品高清| 欧美激情国产精品| 亚洲视频一二| 免费成人在线观看视频| 国产精品揄拍500视频| 亚洲国产精品久久久久秋霞影院| 亚洲无限av看| 欧美1级日本1级| 亚洲在线观看视频网站| 欧美成人性网| 在线观看成人小视频| 欧美夜福利tv在线| 亚洲免费视频中文字幕| 欧美精品久久一区| 欧美性淫爽ww久久久久无| 亚洲第一黄色| 久久国产福利| 亚洲视频免费看| 欧美激情久久久久| 在线日韩欧美| 久久精品国产视频| 亚洲性图久久| 欧美日韩精品一区二区天天拍小说| 影音先锋日韩有码| 久久高清国产| 午夜老司机精品| 国产精品久久久久久久久借妻| 亚洲剧情一区二区| 亚洲电影欧美电影有声小说| 在线午夜精品| 欧美午夜精品伦理| 亚洲欧美综合一区| 亚洲主播在线观看| 国产精品欧美精品| 欧美一级淫片aaaaaaa视频| 在线一区二区三区四区五区| 欧美日韩综合久久| 亚洲一区二区三区四区视频| 日韩午夜电影av| 欧美日韩一二三四五区| 亚洲一区bb| 一本久道综合久久精品| 欧美午夜剧场| 午夜久久资源| 欧美一区深夜视频| 在线日韩成人| 亚洲久色影视| 国产精品久久国产精品99gif| 亚洲影视在线播放| 亚洲一区三区视频在线观看| 国产美女一区二区| 久久最新视频| 欧美 日韩 国产精品免费观看| 91久久线看在观草草青青| 亚洲精品美女久久7777777| 欧美日韩精品一区二区三区四区| 亚洲一区二区久久| 欧美在线91| 亚洲精品久久久蜜桃 | 欧美日韩一区在线观看视频| avtt综合网| 亚洲一区二区三区视频播放| 国产一区二区三区在线观看免费视频| 亚洲欧美国产制服动漫| 国产伦精品一区二区三区在线观看| 亚洲欧美日韩区| 久久电影一区| 99精品国产高清一区二区| 亚洲一区二区精品视频| 精品成人在线| 一区二区三区国产在线| 国产精品久久777777毛茸茸| 亚洲狼人综合| 国产九区一区在线| 久久久久一区二区三区| 欧美成人乱码一区二区三区| 亚洲天堂av在线免费| 欧美中文在线观看国产| 99视频精品在线| 欧美中文在线视频| 亚洲一区精品电影| 久久久www免费人成黑人精品| 亚洲精品一区二区三区在线观看 | 欧美大片网址| 久久精品99国产精品日本| 欧美成人午夜视频| 欧美在线免费观看| 国产精品成人av性教育| 免费久久精品视频| 国产日韩欧美麻豆| 亚洲丝袜av一区| 日韩网站在线| 美女精品视频一区| 久久久噜噜噜| 国产日本欧美在线观看| 一区二区三区欧美成人| 91久久香蕉国产日韩欧美9色 | 欧美日一区二区三区在线观看国产免 | 亚洲一区不卡| 亚洲视频一区二区在线观看| 久久看片网站| 先锋影音国产一区| 国产精品久久久久久久久借妻| 亚洲国产小视频| 亚洲第一中文字幕| 久久精品免费看| 久久久久久综合| 国产精品一区二区你懂得| 日韩视频中文| 一卡二卡3卡四卡高清精品视频| 欧美不卡视频一区发布| 欧美激情精品久久久久久免费印度| 国产一区欧美| 销魂美女一区二区三区视频在线| 亚洲欧美日韩国产综合| 欧美午夜精品久久久久久超碰| 亚洲精品欧美日韩| 亚洲天堂av在线免费观看| 欧美人妖在线观看| 日韩午夜电影av| 午夜久久黄色| 国产在线观看精品一区二区三区 | 亚洲欧美日本另类| 久久久久久网| 欧美激情a∨在线视频播放| 经典三级久久| 老巨人导航500精品| 性高湖久久久久久久久| 国产女主播一区二区三区| 日韩视频免费在线观看| 欧美视频官网| 欧美高清日韩| 亚洲区中文字幕| 欧美母乳在线| 亚洲一区二区在线观看视频| 亚洲欧美日韩一区二区三区在线| 国产精品高清一区二区三区| 午夜精品网站| 欧美激情一区二区三区高清视频 | 在线视频国产日韩| 欧美99久久| 夜夜嗨av一区二区三区| 亚洲午夜久久久久久久久电影院 | 国产精品理论片| 亚洲一区在线观看免费观看电影高清 | 国产亚洲精品7777| 老司机一区二区三区| 一本色道**综合亚洲精品蜜桃冫| 午夜精品久久久久久久99热浪潮| 亚洲精品欧美精品| 欧美日韩免费网站| 亚洲免费视频成人| 久久影音先锋| 亚洲视频精选在线| 国产欧美短视频| 久久影院午夜片一区| 日韩一级片网址| 另类天堂视频在线观看| 国内精品伊人久久久久av一坑| 欧美a级片一区| 香蕉久久一区二区不卡无毒影院| 免费亚洲一区二区| 一本色道婷婷久久欧美| 欧美午夜在线视频| 欧美在线日韩精品| 一区二区三区高清在线| 亚洲激情第一页| 久久综合久久综合这里只有精品 | 亚洲人成网站色ww在线| 国产精品免费看片| 欧美日韩播放| 欧美成人一区在线| 久久久女女女女999久久| 亚洲欧美日韩国产成人| 一本色道久久99精品综合| 欧美sm重口味系列视频在线观看| 久久精品免费看| 亚洲无亚洲人成网站77777|