6

私はユニークな連絡先を選択します。私はこのコードを使用していますandroidからユニークな連絡先を選択する方法

ContentResolver cr = getContentResolver(); 
     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, 
       null, null, ContactsContract.Contacts.DISPLAY_NAME); 
     // Find the ListView resource. 
     mainListView = (ListView) findViewById(R.id.mainListView); 

     // When item is tapped, toggle checked properties of CheckBox and 
     // Planet. 
     mainListView 
       .setOnItemClickListener(new AdapterView.OnItemClickListener() 
       { 
        public void onItemClick(AdapterView<?> parent, View item, 
          int position, long id) 
        { 
         ContactsList planet = listAdapter.getItem(position); 
         planet.toggleChecked(); 
         PlanetViewHolder viewHolder = (PlanetViewHolder) item 
           .getTag(); 
         viewHolder.getCheckBox().setChecked(planet.isChecked()); 
        } 
       }); 

     // Create and populate planets. 
     planets = (ContactsList[]) getLastNonConfigurationInstance(); 
     // planets = new Planet[10]; 
     // planets.Add("asdf"); 
     ArrayList<ContactsList> planetList = new ArrayList<ContactsList>(); 
     String phoneNumber = null; 
     String phoneType = null; 

     count = cur.getCount(); 
     contacts = new ContactsList[count]; 

     if (planets == null) 
     { 
      if (cur.getCount() > 0) 
      { 
       planets = new ContactsList[cur.getCount()]; 
       int i = 0; 
       // 
       while (cur.moveToNext()) 
       { 
        String id = cur.getString(cur 
          .getColumnIndex(ContactsContract.Contacts._ID)); 
        String name = cur 
          .getString(cur 
            .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
        if (Integer 
          .parseInt(cur.getString(cur 
            .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
        { 
         // Query phone here. Covered next 
         Cursor pCur = cr 
           .query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
             null, 
             ContactsContract.CommonDataKinds.Phone.CONTACT_ID 
               + " = ?", new String[] 
             { id }, null); 

         // WHILE WE HAVE CURSOR GET THE PHONE NUMERS 
         while (pCur.moveToNext()) 
         { 
          // Do something with phones 
          phoneNumber = pCur 
            .getString(pCur 
              .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA)); 

          phoneType = pCur 
            .getString(pCur 
              .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); 

          Log.i("Pratik", name + "'s PHONE :" + phoneNumber); 
          Log.i("Pratik", "PHONE TYPE :" + phoneType); 
         } 
         pCur.close(); 
        } 

        planets = new ContactsList[] 
        { new ContactsList(name, phoneNumber) }; 

        contacts[i] = planets[0]; 
        planetList.addAll(Arrays.asList(planets)); 

        i++; 
       } 
      } 

このコードはすべての連絡先を取得し、リストに入れます。私はユニークな連絡先と電話番号を持っているものだけを求めます。これどうやってするの??一意の連絡先だけを選択するためにクエリに引数を渡す方法はありますか?電話番号や連絡先の名前

// set as global 
Set<string> phonenumbersList = new HashSet<string>(); 

      Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,null,null, null); 
      while (phones.moveToNext()) 
      { 
      String name=phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
      String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

      //contact has name number and phonenumber does not exists in list 
      if (phoneNumber != null && name != null && !phonenumbersList.contains(phoneNumber)){ 
       planets = new ContactsList[]{ new ContactsList(name, phoneNumber) }; 

       phonenumbersList.add(phoneNumber); 
       planetList.addAll(Arrays.asList(planets)); 
       planetList.Add(phoneNumber, name); 
      } 
      } 
      phones.close(); 

答えて

11

を取得する

+0

前のICSで作業していません... –

+0

@Puru:Android2.2でこれを使用しました –

+0

@Jul:ICS以上のバージョンのソリューションはありますか? –

0

簡単な方法私はあなたがいくつかの連絡先のレコードを複製しました意味だと思います。したがって、クエリの条件を追加する必要があります。不可欠な部分は、目に見えるグループとに連絡先がで、電話番号がである必要があります。

String selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '" 
       + ("1") + "'"; 
     String sortOrder = ContactsContract.Contacts.DISPLAY_NAME 
       + " COLLATE LOCALIZED ASC"; 
cur = context.getContentResolver().query(
       ContactsContract.Contacts.CONTENT_URI, projection, selection 
         + " AND " + ContactsContract.Contacts.HAS_PHONE_NUMBER 
         + "=1", null, sortOrder);// this query only return contacts which had phone number and not duplicated 
+1

私のコードですでにphonenumberを取得しています。私はユニークな連絡先 –

+2

を選択したいと思います。あなたは一意の下で何を理解していますか? – user1841306

+0

私は繰り返しはしたくありません。 1つの電話番号が1回だけ来る –

1

これは私が電話番号に連絡を取るために働いています。ここでは、データテーブルにクエリを行い、CONTACT_IDを使用しています。contact provider documentation

@Override 
    public Loader<Cursor> onCreateLoader(int id, Bundle args) { 

final String ORDER_BY = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY + " ASC"; 

    final String[] PROJECTION = { 
      ContactsContract.CommonDataKinds.Phone.CONTACT_ID, 
      ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY, 
      ContactsContract.CommonDataKinds.Phone.NUMBER 
    }; 

return new CursorLoader(
       context, 
       ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
       PROJECTION, 
       null, 
       null, 
       ORDER_BY 
     ); 
} 
関連する問題