android通訊錄
① 開發Android 通訊錄要做哪些工作
首先,你需要知道獲取系統聯系人需要哪些許可權
其次,你要知道你的通訊錄想要以什麼樣的形式存在:既,你的通訊錄的設計
最後,整理出設計這個通訊錄會使用哪些技術,然後一一弄清楚。
這些准備工作做好了以後,你就可以著手做你想要的通訊錄了,加油吧樓主!!
② android開發怎樣獲取通訊錄聯系人信息
在Android開發中,我經常會遇到需要獲取手機通訊錄聯系人信息,Android手機的通訊錄聯系人全部都存在系統的資料庫中,如果須要獲得通訊里聯系人的信息就須要訪問系統的資料庫,才能將信息獲取出來。
    下面直接貼出代碼供大家參考:
程序文件java代碼:
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, 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卡聯系人人信息**/  
    private void getSIMContacts() {  
    ContentResolver resolver = mContext.getContentResolver();  
    // 獲取Sims卡聯系人  
    Uri uri = Uri.parse("content://icc/adn");  
    Cursor phoneCursor = resolver.query(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);  
 
        //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;  
    }  
 
    }  
}
③ 如何調用android通訊錄
這個過程有三步:
1)許可向你的應用程序的manifest中添加讀取通訊錄數據的許可
<uses-permission android:name="android.permission.READ_CONTACTS"/
2)調用Contact Picker
在你的activity中,創建一個Intent,用來請求系統查找一個能夠執行一個從Contacts URI的項目中發出的PICK動作的activity,
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
調用startActivityForResult在Intent中傳遞(和一個整數的請求代碼,在這個例子中是PICK CONTACT )。這將導致android啟動一個已經被等級的activity,用來支持在People.CONTENT URI上的ACTION_PICK ,然後當按下選擇(或者取消)的時候返回到這個activity。startActivityForResult(intent, PICK_CONTACT);
3)仍然在你的activity中,重寫onActivityResul方法來監聽在你的第二個步驟中啟動的activi'select a contact' activity的回調。你應該檢查反饋的請求代碼是否匹配你的期望值,結果代碼是否是 RESULT_OK。
通過在數據Intent參數中調用getData()你可以獲得選擇的聯系人的URI。為了獲得選擇的聯系人的名字你需要使用URI從返回的游標中創建一個新的查詢和提取的參數。
@Overridepublic void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
switch (reqCode) {
case (PICK_CONTACT) :
if (resultCode == Activity.RESULT_OK) {
Uri contactData = data.getData();
Cursor c =  managedQuery(contactData, null, null, null, null);
if (c.moveToFirst()) {
String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));}}break;}}
④ 安卓通訊錄推薦
QQ同步助手:

360同步助手是一款通訊錄同步及通訊錄體檢於一身的服務軟體。一鍵自動同步您手機中的通訊錄,在換機換號的情況下也不用擔心數據的丟失。
產品特點描述:
【更便捷】
將手機通訊錄一鍵備份同步到網路,隨時同步回手機,讓換機、整理更便捷。
【更快速】
採用增量同步及數據壓縮技術,保證個人數據快速備份的同時更節省流量。
【更安全】
數字證書加密傳輸,信息安全可靠,永不丟失。
【更全面】
通訊錄一鍵體檢優化,重復聯系人、不完整聯系人等問題輕松搞定。
號簿助手:
號簿助手是中國電信打造的一款集安全備份、多端同步、通訊增強、便捷生活的通訊助手應用,支持Android、IOS、Brew、Windows Mobile手機客戶端。
號簿助手提供一鍵聯系人/簡訊/通話記錄備份、T9急速搜索、便捷簡訊群發、公共服務電話自動識別、充話費/查號等功能,支持WEB/WAP/手機客戶端等多種方式進行聯系人的查詢、編輯、備份和恢復,是您移動通訊生活的好助手、換機時的好幫手。
⑤ android通訊錄應用需要哪些許可權
通訊錄需要如下許可權:
android讀寫聯系人,讀和寫許可權:
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />  
android許可權系統非常龐大,在android系統中做任何操作都需要首先獲取android系統許可權,以下是android許可權大全:
訪問網路
android.permission.INTERNET,訪問網路連接,可能產生GPRS流量
android.permission.CHANGE_WIFI_STATE  Wifi 改變狀態
android.permission.ACCESS_WIFI_STATE WiFi 狀態
android.permission.ACCESS_NETWORK_STATE 網路狀態
⑥ 如何製作android手機通訊錄
這個涉及到java還有安卓調用介面許可權以及liunx的東西,不適合你這新手去搞。
跟備份通信錄一樣打開聯系人。
按菜單鍵調出通信錄編輯菜單。在這一步之前要把先前導出的通信錄文件放到內置SD卡中 
選擇:從SD卡導入。
系統開始自動尋找內置SD卡中的vcf格式的通信錄文件。
系統找到以後,會彈出一個選擇窗口(如果有多個通信錄備份文件),為了不出現差錯,選擇「導入電子名片文件」。
我的SD卡中有兩個備份文件,這里就選擇第一個就好了。選擇好後點確定。
手機開始導入聯系人,等進度條走完即可。
⑦ 安卓手機如何互相轉通訊錄
可以通過「QQ同步助手」APP實現兩個手機間互傳通訊錄:
1、在兩部手機的應用商城中搜索「QQ同步助手」APP,並下載安裝:

通過以上方法就可以將一部手機中的通訊錄傳到另一部手機了。
⑧ android 通訊錄 怎麼改聯系人
通過getContentResolver()得到ContentResolver
後,我們就可以通過該對象的delete,insert,updata,query等方法間接操作聯系人資料庫,那麼,如果我們刪除某些聯系人,以ContactsContract.RawContacts.CONTENT_URI為例,怎麼做,先來看下源碼:
首先,ContentResolver調用delete();刪除操作從紅色部分開始
@Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        waitForAccess();
        return super.delete(uri, selection, selectionArgs);
    }
上面的super.delete(uri, selection, selectionArgs)調用父親方法
@Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        int count = 0;
        boolean applyingBatch = applyingBatch();
        if (!applyingBatch) {
            mDb = mOpenHelper.getWritableDatabase();
            mDb.beginTransactionWithListener(this);
            try {
                count = deleteInTransaction(uri, selection, selectionArgs);
                if (count > 0) {
                    mNotifyChange = true;
                }
                mDb.setTransactionSuccessful();
            } finally {
                mDb.endTransaction();
            }
            onEndTransaction();
        } else {
            count = deleteInTransaction(uri, selection, selectionArgs);
            if (count > 0) {
                mNotifyChange = true;
            }
        }
        return count;
    }
父類回調deleteInTransaction(uri, selection, selectionArgs);刪除聯系人操作在這里進行。
//該方法對uri進行匹配來執行相應的刪除操作,並且是在事務中完成的,,比如
//content://com.android.contacts/contacts
//content://com.android.contacts/contacts/#
// .......................................................省略
@Override
    protected int deleteInTransaction(Uri uri, String selection, String[] selectionArgs) {
           .......................................................
           .......................................................
         //我們可以在uri中的authority部分可帶可選的參數ContactsContract.CALLER_IS_SYNCADAPTER
        //比如uri字元串可以寫成content://com.android.contacts?ContactsContract.CALLER_IS_SYNCADAPTER=true
        // ContactsContract.CALLER_IS_SYNCADAPTER默認是false的,他告訴同步適配器如何執行刪除操作。
       //如果設置為true,則delete的時候直接刪除聯系人,否則,默認delete時是不會立即刪除RawContacts中的數據的,
       //只是把RawContacts.DELETED標志位設置為1,從它的aggregate contact中移除該raw contact,即顯示聯系人時不顯示它的內容
        //同步聯系人時,刪除伺服器上的raw contact,最終刪除手機上已
       //標記為DELETED為1的raw contacts
        final boolean callerIsSyncAdapter = readBooleanQueryParameter(uri, ContactsContract.CALLER_IS_SYNCADAPTER, false);
        final int match = sUriMatcher.match(uri);
        switch (match) {
           .......................................................
           .......................................................
           .......................................................
            case CONTACTS: {//uri為content://com.android.contacts/contacts,目錄(dir)類型
                // TODO
                return 0;
            }
            case CONTACTS_ID: {//刪除某一個聯系人,uri指定了ContactsContract.Contacts中的欄位contact_id,Item類型
                long contactId = ContentUris.parseId(uri);//得到該給定聯系人數據集的id
                return deleteContact(contactId);
            }
           .......................................................
           .......................................................
           .......................................................
            case RAW_CONTACTS: {
                int numDeletes = 0;
                Cursor c = mDb.query(Tables.RAW_CONTACTS, new String[]{RawContacts._ID},
                        appendAccountToSelection(uri, selection), selectionArgs, null, null, null);
                try {
                    while (c.moveToNext()) {
                        final long rawContactId = c.getLong(0);
                        numDeletes += deleteRawContact(rawContactId, callerIsSyncAdapter);
                    }
                } finally {
                    c.close();
                }
                return numDeletes;
            }
            case RAW_CONTACTS_ID: {
                final long rawContactId = ContentUris.parseId(uri);
                return deleteRawContact(rawContactId, callerIsSyncAdapter);
            }
            case DATA: {
                mSyncToNetwork |= !callerIsSyncAdapter;
                return deleteData(appendAccountToSelection(uri, selection), selectionArgs,
                        callerIsSyncAdapter);
            }
            case DATA_ID:
            case PHONES_ID:
            case EMAILS_ID:
            case POSTALS_ID: {
                long dataId = ContentUris.parseId(uri);
                mSyncToNetwork |= !callerIsSyncAdapter;
                return deleteData(Data._ID + "=" + dataId, null, callerIsSyncAdapter);
            }
           .......................................................
           .......................................................
           .......................................................
        }
    }
public int deleteRawContact(long rawContactId, boolean callerIsSyncAdapter) {
        if (callerIsSyncAdapter) {
            mDb.delete(Tables.PRESENCE, PresenceColumns.RAW_CONTACT_ID + "=" + rawContactId, null);
            //直接刪除數據
            return mDb.delete(Tables.RAW_CONTACTS, RawContacts._ID + "=" + rawContactId, null);
        } else {
            //從他關聯的aggregate contact移除該數據
            mDbHelper.removeContactIfSingleton(rawContactId);
            //標記為已刪除,但不是立即刪除數據
            return markRawContactAsDeleted(rawContactId);
        }
    }
綜上,我們要刪除聯系人可以這樣做:
1)刪除單個聯系人:
CR.delete(ContactsContract.RawContacts.CONTENT_URI,ContactsContract.RawContacts_id + "=" + delRawId);
2)刪除全部聯系人:
getContentResolver().delete(Uri.parse(ContactsContract.RawContacts.CONTENT_URI.toString() +"?" + ContactsContract.CALLER_IS_SYNCADAPTER+"=true"), ContactsContract.RawContacts._ID + ">0", null));
數據索引從1開始,所以只要id>0就可以全部刪除raw contact記錄,上面的刪除操作是立即進行的,因為我們設置了true.
