2017-05-20 13 views
0

나는 대화 상대의 전화 번호를 프로그래밍 방식으로 얻으 려는데, 내 연락처 활동을 표시하지 않고 이름 만 묻는 것입니다.의도를 열지 않고 연락처에서 전화 번호를 검색 할 수 있습니까?

가능합니까? 그리고 어떻게?

나는 다음을 시도하지만 난 내 권한을 설정 한 경우에도 권한 오류가 매니페스트

ContentResolver cr = getContentResolver(); 
    Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 



    ArrayList<String> contact_names = new ArrayList<String>(); 

    if (cur.getCount() > 0) 
    { 
     while (cur.moveToNext()) 
     { 
      String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
      String name = "GIAGIA"; 
      if (cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER.trim())).equalsIgnoreCase("1")) 
      { 
       if (name!=null){ 
        //contact_names[i]=name; 

        Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?",new String[]{id}, null); 
        while (pCur.moveToNext()) 
        { 
         String PhoneNumber = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

         Toast.makeText(getBaseContext(),PhoneNumber ,Toast.LENGTH_LONG).show(); 
         //i++; 
         break; 
        } 
        pCur.close(); 
        pCur.deactivate(); 
        // i++; 
       }else 
       { 
        Toast.makeText(getBaseContext(),"Does not exist",Toast.LENGTH_LONG).show(); 
       } 
      } 
     } 
     cur.close(); 
     cur.deactivate(); 
    } 

    String[] contactList = new String[contact_names.size()]; 

    for(int j = 0; j < contact_names.size(); j++){ 
     contactList[j] = contact_names.get(j); 
    } 

    return contactList; 
} 
+0

에만 name'를 묻는 또한, 받고있어 오류를'게시하시기 바랍니다 - 사용자에게 연락처 이름을 묻는 것입니까? 같은 이름으로 연락처가 두 개 있다면 어떻게 될까요? – marmor

답변

0

당신이 할 말은하는 것은 사용자의 연락처 이름을 얻을에 전화 번호를 찾을 경우 Contacts DB,이 작동합니다 :

public List<String> getPhoneNumbersByName(String name) { 
    List<String> phones = new ArrayList<>(); 
    String[] projection = new String[] { Phone.DISPLAY_NAME, Phone.NUMBER }; 
    Cursor cur = cr.query(Phone.CONTENT_URI, projection, Phone.DISPLAY_NAME + "=?", new String[]{ name }, null); 
    while (cur != null && cur.moveToNext()) { 
     phones.add = cur.getString(1); 
    } 
    if (cur != null) { 
     cur.close(); 
    } 
    return phones; 
} 

참고 :

  1. 더 일이있을 수있다 동일한 이름의 연락처 하나만 주어진 이름과 일치하는 모든 연락처에 속한 모든 숫자를 반환합니다.
  2. 각 연락처마다 여러 개의 숫자가 저장 될 수 있으므로이 함수는 전화 목록을 반환합니다.
  3. 이름은 일치, 당신은 대소 문자를 구별로 선택을 변경하여이 제한을 완화 및/또는 사용할 수 있습니다 Sqlite의 "LIKE"옵션