如何从电话簿和电子邮件中获取所有联系人Android中的SIM卡?

时间:2013-03-22 04:33:58

标签: android android-contacts

我正在努力从我的应用程序中获取电话簿和SIM卡中的所有联系人。我想将所有联系人存储在我的应用程序SQLite DB中。我正在使用的代码在正常条件下正常工作。在以下条件下遇到问题:

  1. 没有姓名的联系人,只是号码。
  2. 来自SIM卡的联系人。
  3. 我的代码不向我提供这两种类型的联系人。我使用以下代码:

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

3 个答案:

答案 0 :(得分:5)

以下代码显示了阅读所有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;           
             }
            }

答案 1 :(得分: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();

    }

答案 2 :(得分: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);

从光标您可以获得所有数据

相关问题