3

我正在努力从我的应用程序中的电话簿和 SIM 卡中获取所有联系人。我想将所有联系人存储在我的应用程序 SQLite DB 中。我正在使用的代码在正常情况下运行良好。在以下情况下出现问题:

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

3 回答 3

5

下面是代码,它显示了一种阅读所有phone numbers和的简单方法names

   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;           
             }
            }
于 2013-03-22T04:53:17.803 回答
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();

    }
于 2014-05-09T13:14:01.580 回答
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);

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

于 2013-03-22T04:49:32.230 回答