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

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>
            久久精品二区三区| 久久精品噜噜噜成人av农村| 国产在线高清精品| 欧美日韩三区四区| 久久综合导航| 久久成人国产精品| 亚洲一区二区三区在线看 | 欧美在线视频在线播放完整版免费观看| 国产一区视频观看| 国内免费精品永久在线视频| 国产一区二区三区的电影| 日韩午夜av电影| 国产毛片一区| 国产精品夜色7777狼人| 国产精品素人视频| 好看的亚洲午夜视频在线| 在线看无码的免费网站| 99国产精品久久久| 亚洲美女在线视频| 亚洲欧美一区二区在线观看| 欧美一区亚洲二区| 欧美激情偷拍| 亚洲一区中文字幕在线观看| 久久精品亚洲国产奇米99| 老牛嫩草一区二区三区日本| 欧美日韩三级| 日韩一级在线观看| 久热精品视频在线观看一区| 日韩一级精品视频在线观看| 久久亚洲春色中文字幕| 国产日韩综合| 欧美大色视频| 欧美久久久久久久久久| 99香蕉国产精品偷在线观看| 一区二区三区免费观看| 国产欧美日韩专区发布| 亚洲日本欧美日韩高观看| 久久免费视频观看| 久久九九电影| 国产精品久久久久久久久久三级 | 久久久夜夜夜| 午夜精品一区二区三区电影天堂 | 一区二区三区视频在线播放| 欧美激情一区二区三区四区| 欧美大片在线观看一区| 99国内精品久久久久久久软件| 欧美电影免费观看高清| 欧美不卡高清| 久久大逼视频| 免费成人黄色| 久久久久久久久久久久久女国产乱| 亚洲综合国产| 最新日韩在线| 一区二区高清视频在线观看| 国产精品爽黄69| 欧美国产精品| 国产精品色午夜在线观看| 久久久亚洲国产美女国产盗摄| 欧美激情亚洲精品| 久久aⅴ国产欧美74aaa| 欧美日韩国产在线播放| 久久久久88色偷偷免费| 国产精品国产三级国产aⅴ入口| 久久久久看片| 国产乱码精品一区二区三| 欧美黄污视频| 亚洲福利国产精品| 午夜精品成人在线| 午夜精彩国产免费不卡不顿大片| 另类春色校园亚洲| 玖玖综合伊人| 狠狠色丁香婷婷综合影院| 亚洲欧美文学| 欧美一级久久久| 国产精品久久久久免费a∨| 91久久精品美女| 99这里只有精品| 欧美不卡视频一区发布| 怡红院精品视频| 老牛影视一区二区三区| 欧美激情亚洲综合一区| 这里只有视频精品| 欧美日本三级| 销魂美女一区二区三区视频在线| 久久不射网站| 亚洲日本免费| 国产日韩在线一区| 久久久国际精品| 一区二区三区精品国产| 新狼窝色av性久久久久久| 国内精品视频一区| 欧美激情一区二区三级高清视频 | 99re热精品| 久久精品一区二区国产| 亚洲人成7777| 国产综合久久| 欧美日韩中文字幕在线视频| 久久久久一区二区| 一本大道av伊人久久综合| 欧美www在线| 久久久亚洲高清| 欧美主播一区二区三区美女 久久精品人 | 久久精品国产亚洲一区二区三区 | 亚洲男人第一网站| 国产亚洲在线观看| 国产精品国产三级国产a| 欧美高清视频在线| 午夜亚洲性色福利视频| 老鸭窝91久久精品色噜噜导演| 久久夜色精品国产欧美乱极品| 亚洲国产美国国产综合一区二区| 欧美亚洲一区二区在线观看| 亚洲人永久免费| 国产主播一区二区三区| 国产亚洲永久域名| 国产精品一区二区三区久久久| 欧美日本韩国一区二区三区| 久久精品一区二区三区不卡| 亚洲欧美日韩精品久久久| 夜久久久久久| 一区二区高清| 久久九九全国免费精品观看| 你懂的国产精品永久在线| 麻豆av一区二区三区| 欧美成人一区二区| 亚洲黄页视频免费观看| 99精品国产99久久久久久福利| 国产毛片一区二区| 国产亚洲欧美色| 亚洲国产高潮在线观看| 亚洲视频高清| 欧美一区在线视频| 久久人人97超碰精品888| 久久久综合激的五月天| 亚洲三级影院| 久热精品视频在线观看| 久久久精品日韩欧美| 鲁鲁狠狠狠7777一区二区| 亚洲美女精品一区| 久久久99免费视频| 欧美大香线蕉线伊人久久国产精品| 欧美大片免费观看在线观看网站推荐| 国产精品专区一| 欧美激情一区二区三区全黄| 国产午夜精品久久| 日韩一级免费| 最新成人在线| 欧美α欧美αv大片| 激情久久综艺| 美女视频网站黄色亚洲| 亚洲一区二区在线免费观看视频 | 亚洲深夜福利网站| 牛牛国产精品| 欧美精品日韩www.p站| 国模私拍一区二区三区| 欧美一区影院| 久久久久国产精品一区三寸| 在线不卡中文字幕| 久久全国免费视频| 久久久蜜臀国产一区二区| 国产一区白浆| 欧美 日韩 国产在线| 欧美福利专区| 亚洲午夜在线观看| 久久激情一区| 久久午夜视频| 亚洲一区二区成人在线观看| 亚洲欧美bt| 另类成人小视频在线| 一区二区三区欧美激情| 午夜精品一区二区在线观看| 亚洲一区二区三区中文字幕在线| 欧美区一区二| 久久爱www| 欧美日韩在线三级| 久久综合久色欧美综合狠狠| 欧美日韩国产首页| 久久精品日韩欧美| 欧美岛国激情| 久久综合久久综合九色| 欧美精品18| 欧美激情久久久| 一区二区在线观看av| 亚洲一区三区视频在线观看| 99re热这里只有精品免费视频| 久久久之久亚州精品露出| 欧美一区二区三区在| 欧美视频免费看| 中日韩美女免费视频网址在线观看 | 快she精品国产999| 国产女主播视频一区二区| 亚洲三级电影在线观看 | 蜜桃久久av| 欧美电影免费观看高清| 亚洲精品婷婷| 欧美视频中文一区二区三区在线观看| 99国产精品视频免费观看一公开| 亚洲欧洲精品一区| 国产精品chinese| 亚洲欧美激情精品一区二区|