Android通信録取得

8083 ワード

開発アプリケーションでは,ローカル携帯電話の通信録,特にsns関連クラスのアプリケーションを取得することが多い.通信録はプライバシーに属するため,開発過程で通信録を取得するにはユーザの同意を求めるべきである.通信録は一般的に2つの場所に存在し、1つはローカル携帯電話で、1つはsimカードに存在します.この2つの場所の連絡先をどのように取得するかについてそれぞれ議論します.(ここでは連絡先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 }