2013-03-22 93 views
4

我正在努力从我的应用程序中获取电话簿和SIM卡中的所有联系人。我想将所有联系人存储在我的应用程序SQLite数据库中。我正在使用的代码在正常情况下工作正常。在以下条件下解决问题:如何从Android的电话簿和SIM卡中获取所有联系人?

  1. 带有不带姓名的联系人,即只有号码。
  2. 来自SIM卡的联系人。

这两种类型的联系人,不是由我的代码提供给我的。我使用下面的代码:

public void getDefaultContactsToDB(){ 
     CallBackDatabase callbackDB = new CallBackDatabase(RequestCallBack.this); 
     callbackDB.open(); 

     //clean the database before entering new values. 
     callbackDB.deleteTable(CallBackDatabase.DATABASE_TABLE); 

     ContentResolver cr = getContentResolver(); 
     Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); 
     if (cur.getCount() > 0) { 
      while (cur.moveToNext()) { 
       String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
       Cursor cur1 = cr.query( 
         ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, 
         ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
         new String[]{id}, null); 
       while (cur1.moveToNext()) { 
        //to get the contact names 
        ArrayList<String> numbers= new ArrayList<String>(); 
        String contactNoumber=""; 
        String name=cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
        if(name!=null){ 
         Log.e("Name :", name); 
         if(name.equalsIgnoreCase("011999999999999999")){ 
          System.out.println("got it"); 
         } 
        } 
        //to get the contact email 
        String email = cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
        if(email!=null) 
         Log.e("Email", email); 

        String hasNoumber = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
        if(Integer.parseInt(hasNoumber)>0){ 
         Cursor pCur = getContentResolver().query(
           ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = " 
             +cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)),null, null); 
         int i = 0; 
         while (pCur.moveToNext()) { 
          //to get the contact number 
          contactNoumber = pCur.getString(pCur.getColumnIndex("DATA1")); 
          if(contactNoumber.equalsIgnoreCase("011999999999999999")){ 
           System.out.println("got it"); 
          } 
          contactNoumber = Constant.removeSpecialCharacters(contactNoumber); 
          Log.e("contactNoumber", contactNoumber); 
          // Getting Phone numbers 
          String numType = null; 
          if(pCur.getString(pCur.getColumnIndex("mimetype")).equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)){ 

           switch(pCur.getInt(pCur.getColumnIndex("data2"))){ 
           case ContactsContract.CommonDataKinds.Phone.TYPE_HOME : 
            numType = "HOME"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE : 
            numType = "MOBILE"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_WORK : 
            numType = "WORK"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_OTHER : 
            numType = "OTHER"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_ASSISTANT : 
            numType ="OTHER"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_CALLBACK : 
            numType = "CALLBACK"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_CAR : 
            numType ="CAR"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_COMPANY_MAIN : 
            numType = "COMPANY MAIN"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_FAX_HOME : 
            numType = "FAX HOME"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK : 
            numType = "FAX WORK"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_MAIN : 
            numType = "MAIN"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_ISDN : 
            numType = "ISDN"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_MMS : 
            numType = "MMS"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_OTHER_FAX : 
            numType = "OTHER FAX"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_PAGER : 
            numType = "PAGER"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_RADIO : 
            numType = "RADIO"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_TELEX : 
            numType ="TELEX"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_TTY_TDD : 
            numType = "TTY TDD"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_WORK_MOBILE : 
            numType = "WORK MOBILE"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_WORK_PAGER : 
            numType = "WORK PAGER"; 
            break; 
           case ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM : 
            numType = "CUSTOM"; 
            break; 
           default: 
            break; 
           } 
          } 

          numbers.add(i, contactNoumber+"("+numType+")"); 

          i++; 
         } 
         String numInDB = null; 
         for (int j = 0; j < i; j++) { 
          if(j==0) 
           numInDB =numbers.get(j); 
          else 
           numInDB =numInDB + "," +numbers.get(j); 
         } 
         if(contactNoumber.length()>0){ 
          if(name!=null){ 

          }else{ 
           name = contactNoumber; 
          } 
          callbackDB.InsertContacts(null, name+"="+numInDB, contactNoumber, email); 
         } 
        } 
       } 
       cur1.close(); 
      } 
      //CLOSE DB 
      callbackDB.close(); 
     } 
    } 

回答

0

下面的代码将返回联系人的所有名称

public static Cursor get(Context c){ 
    Uri uri = ContactsContract.Contacts.CONTENT_URI; 
    String[] projection = new String[] { ContactsContract.Contacts._ID, 
      ContactsContract.Contacts.DISPLAY_NAME }; 
    String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER 
      + " = '1'"; 
    String sortOrder = ContactsContract.Contacts.DISPLAY_NAME 
      + " COLLATE LOCALIZED ASC"; 

    Cursor cursor = c.getContentResolver().query(uri, projection, 
      selection, null, sortOrder); 
    return cursor; 
} 

要得到所有你能做的数据如下

Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 
    String[] projection = new String[] { 
      ContactsContract.CommonDataKinds.Phone._ID, 
      ContactsContract.CommonDataKinds.Phone.CONTACT_ID, 
      ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME, 
      ContactsContract.CommonDataKinds.Phone.NUMBER, 
      ContactsContract.CommonDataKinds.Phone.STARRED, 
      ContactsContract.CommonDataKinds.Phone.TYPE }; 
    String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME 
      + " COLLATE LOCALIZED ASC"; 

    Cursor cursor = context.getContentResolver().query(uri, projection, 
      null, null, sortOrder); 

从光标你可以得到所有的数据

4

下面是显示一个简单的方法来读取所有的代码phone numbersnames

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)); 
    } 
    phones.close(); 

而且对于SIM卡联系人不仅可以使用下面的代码:

private void allSIMContact() 
    { 
    try 
    { 
     String m_simPhonename = null; 
     String m_simphoneNo = null; 

     Uri simUri = Uri.parse("content://icc/adn"); 
     Cursor cursorSim = this.getContentResolver().query(simUri,null,null,null,null); 

     Log.i("PhoneContact", "total: "+cursorSim.getCount()); 

     while (cursorSim.moveToNext()) 
     {  
      m_simPhonename =cursorSim.getString(cursorSim.getColumnIndex("name")); 
      m_simphoneNo = cursorSim.getString(cursorSim.getColumnIndex("number")); 
      m_simphoneNo.replaceAll("\\D",""); 
      m_simphoneNo.replaceAll("&", ""); 
      m_simPhonename=m_simPhonename.replace("|",""); 

      Log.i("PhoneContact", "name: "+m_simPhonename+" phone: "+m_simphoneNo); 
     }   
    } 
    catch(Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

编辑:

为了得到像家一样的联系人的详细信息,手机,传真您需要检查单独如下:

 while (phone_crsr.moveToNext()) 
      { 
     int phone_type = phone_crsr.getInt(phone_crsr.getColumnIndex(Phone.TYPE)); 
      switch (phone_type) 
      {  
      case Phone.TYPE_HOME: 
       phone_home =phone_crsr.getString(phone_crsr.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
       Toast.makeText(this, "home"+phone_home, Toast.LENGTH_LONG).show(); 
       break;   
      case Phone.TYPE_MOBILE:  
       phone_mob=phone_crsr.getString(phone_crsr.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
       Toast.makeText(this, "mob"+phone_mob, Toast.LENGTH_LONG).show(); 
       break;    
      case Phone.TYPE_WORK:         
       phone_work=phone_crsr.getString(phone_crsr.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
        Toast.makeText(this, "work"+phone_work, Toast.LENGTH_LONG).show(); 
         break;   
      } 
      } 
+0

如果我想获得SIM卡+手机通讯录的话,我需要用两个块或以上部分只是? – 2013-03-22 04:58:29

+0

您需要同时使用这两个模块才能获得SIM +手机通讯录。 – GrIsHu 2013-03-22 05:05:27

+0

让我试试,,,让你知道尽快。 – 2013-03-22 05:11:14

3

下面的代码将返回联系人的所有名称,您可以在text view设置 -

 Cursor cursor = null; 
     String name, phoneNumber,image,email; 
     try { 
      cursor = getApplicationContext().getContentResolver() 
        .query(Phone.CONTENT_URI, null, null, null, null); 
      int nameIdx = cursor.getColumnIndex(Phone.DISPLAY_NAME); 
      int phoneNumberIdx = cursor.getColumnIndex(Phone.NUMBER); 
      int photoIdIdx = cursor.getColumnIndex(Phone.PHOTO_URI); 
      cursor.moveToFirst(); 
      do { 
       HashMap<String, String> hashMap = new HashMap<String, String>(); 
       name = cursor.getString(nameIdx); 
       phoneNumber = cursor.getString(phoneNumberIdx); 
       image = cursor.getString(photoIdIdx); 
       //email=cursor.getString(emailIdx); 
       if(!phoneNumber.contains("*")) 
       { 
        hashMap.put("name", "" + name); 
        hashMap.put("phoneNumber", "" + phoneNumber); 
        hashMap.put("image", "" + image); 
        //hashMap.put(email, ""+email); 
        hashMapsArrayList.add(hashMap); 
       } 
      } while (cursor.moveToNext()); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
      if (cursor != null) { 
       cursor.close(); 
      } 
     } 
     myAdapter=new MyAdapter(); 
     listView.setAdapter(myAdapter); 
     myAdapter.notifyDataSetChanged(); 

    } 
相关问题