Android獲取通訊錄


在開發應用中,經常要獲取本地手機的通訊錄,特別是sns相關類的應用。因為通訊錄屬於隱私,所以在開發過程中如果要獲取通訊錄應該征求用戶的同意。
通訊錄一般存在兩個地方,一個是本地手機上,一個是存在sim卡上。
下面分別討論一下怎樣獲取這兩個地方的聯系人。(在這里我只獲取聯系人name 和number)
android通過contentProvider將通訊錄的數據暴露出來,所以只要有一個正確的URI就可以通過contentprovider獲取到通訊錄數據。
貼代碼:

 1 //取本機通訊錄
 2 public static HashMap<String, ContractInfo> getPhoneContracts(Context mContext){
 3 HashMap<String, ContractInfo> map = new HashMap<String, ContractInfo>();
 4 ContentResolver resolver = mContext.getContentResolver();
 5 // 獲取手機聯系人 
 6 Cursor phoneCursor = resolver.query(Phone.CONTENT_URI,null, null, null, null); //傳入正確的uri
 7 if(phoneCursor!=null){
 8 while(phoneCursor.moveToNext()){
 9 int nameIndex = phoneCursor.getColumnIndex(Phone.DISPLAY_NAME); //獲取聯系人name
10 String name = phoneCursor.getString(nameIndex);
11 String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex(Phone.NUMBER)); //獲取聯系人number
12 if(TextUtils.isEmpty(phoneNumber)){
13 continue;
14 }
15 //以下是我自己的數據封裝。
16 ContractInfo contractInfo = new ContractInfo();
17 contractInfo.setName(name);
18 contractInfo.setPhoneNumber(getNumber(phoneNumber));
19 contractInfo.setFrom(PHONE);
20 map.put(getNumber(phoneNumber), contractInfo);
21 }
22 phoneCursor.close();
23 }
24 return map;
25 }
26 
27 
28 接下來看獲取sim卡的方法,sim卡的uri有兩種可能content://icc/adn與content://sim/adn (一般情況下是第一種)
29 public static HashMap<String, ContractInfo> getSimContracts(Context mContext){
30 //讀取SIM卡手機號,有兩種可能:content://icc/adn與content://sim/adn
31 HashMap<String, ContractInfo> map = new HashMap<String, ContractInfo>();
32 
33 ContentResolver resolver = mContext.getContentResolver();
34 Uri uri = Uri.parse("content://icc/adn");
35 Cursor phoneCursor = resolver.query(uri,null, null, null, null); 
36 if(phoneCursor!=null){
37 while(phoneCursor.moveToNext()){
38 String name = phoneCursor.getString(phoneCursor.getColumnIndex("name"));
39 String phoneNumber = phoneCursor.getString(phoneCursor.getColumnIndex("number"));
40 if(TextUtils.isEmpty(phoneNumber)){
41 continue;
42 }
43 //以下是我自己的數據封裝。
44 ContractInfo contractInfo = new ContractInfo();
45 contractInfo.setName(name);
46 contractInfo.setPhoneNumber(getNumber(phoneNumber));
47 contractInfo.setFrom(SIM);
48 map.put(getNumber(phoneNumber), contractInfo);
49 }
50 phoneCursor.close();
51 }
52 return map;
53 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM