當前位置:首頁 » 安卓系統 » android通訊錄

android通訊錄

發布時間: 2022-02-10 04:17:17

① 開發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.

熱點內容
易語言寫ip全局代理伺服器 發布:2025-01-26 15:04:01 瀏覽:668
gm命令在哪個文件夾 發布:2025-01-26 15:03:12 瀏覽:307
javadate類 發布:2025-01-26 14:58:54 瀏覽:352
領航s1配置怎麼樣 發布:2025-01-26 09:58:10 瀏覽:763
公司區域網搭建伺服器搭建 發布:2025-01-26 09:16:56 瀏覽:433
android裁剪圓形圖片 發布:2025-01-26 09:05:56 瀏覽:411
小貸源碼 發布:2025-01-26 08:20:58 瀏覽:536
更換電腦名登錄伺服器 發布:2025-01-26 07:56:52 瀏覽:240
後台phpjava 發布:2025-01-26 07:12:34 瀏覽:657
微信解綁密碼是什麼 發布:2025-01-26 06:50:07 瀏覽:734