【问题标题】:Android - Display sim and phone contactsAndroid - 显示 SIM 卡和手机联系人
【发布时间】:2015-02-24 16:44:55
【问题描述】:

我正在尝试获取 SIM 卡和电话联系人。我成功使用电话联系人(电话联系人和同步联系人),但使用 SIM 卡联系人我失败了...... 我尝试了很多 URI,但没有一个工作,所以我认为你们可以帮助我。

    private void Click (object sender , EventArgs eventArgs)
{
    Intent intent = new Intent (Intent.ActionPick , Android.Net.Uri.Parse ("content://contacts"));
    intent.SetType (ContactsContract.Contacts.ContentType);
    StartActivityForResult (intent , SMS_Send.PICK_NUMAR);
}

    protected override void OnActivityResult (int requestCode, Result resultCode, Intent data)
    {
        if ((requestCode == SMS_Send.PICK_NUMAR) && (resultCode == Result.Ok) && (data != null)) {
            Android.Net.Uri uriContact = data.Data;
            ICursor cursor = ManagedQuery (uriContact,null,null,null,null);

            if (cursor.MoveToFirst ()) {
                string NUME_CONTACT = cursor.GetString (cursor.GetColumnIndex(ContactsContract.Contacts.InterfaceConsts.DisplayName));
                string NUMAR_TELEFON = getPhoneNumber (NUME_CONTACT);
                ISharedPreferences NumeNumar = GetPreferences (FileCreationMode.Private);
                ISharedPreferencesEditor Editor = NumeNumar.Edit ();
                Editor.PutString ("NUMAR_TELEFON" , NUMAR_TELEFON);
                Editor.PutString ("NUME_CONTACT" , NUME_CONTACT);
                Editor.Apply ();
            } 

        } 
    }

    public string getPhoneNumber(string name)
    {
        string ret = null;
        string selection = ContactsContract.Contacts.InterfaceConsts.DisplayName +" like '%" + name +"%'";
        string[] projection = new string[] { ContactsContract.CommonDataKinds.Phone.Number };
        ICursor c = ManagedQuery (ContactsContract.CommonDataKinds.Phone.ContentUri,projection,selection,null,null);
        if (c.MoveToFirst ()) {
            ret = c.GetString (0);
        }

        return ret;
    }

提前谢谢你!

【问题讨论】:

    标签: c# android contacts android-contacts


    【解决方案1】:

    这对我有用!

    public class MyContacts {
    
    public static String getContacts(Context context){
    
        StringBuffer outBuffer = new StringBuffer();
        outBuffer.append("");
        String strOrder = ContactsContract.Contacts.DISPLAY_NAME + " ASC";
        ContentResolver cr = context.getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, strOrder);    
        outBuffer.append("<contacts>");
        if (cur.getCount() > 0 ) {
            while (cur.moveToNext()  ) {
    
                outBuffer.append("<contact>").
                          append("<fullname>").
                          append(ServerData.getStartcdataxml() + cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)) + ServerData.getEndcdataxml()).
                          append("</fullname>").
                          append("<id>").
                          append(cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID))).
                          append("</id>").
                          append("</contact>");         
                    }
            cur.close();
            }
        outBuffer.append("</contacts>");
        return outBuffer.toString();
     }
    
    public static String getContactByID(Context context,String contact_id){
    
        StringBuffer outBuffer = new StringBuffer();
        outBuffer.append("");
        //Long inizioLettura = System.currentTimeMillis();
        Uri CONTENT_URI = ContactsContract.Contacts.CONTENT_URI;    
        String HAS_PHONE_NUMBER = ContactsContract.Contacts.HAS_PHONE_NUMBER;
    
        Uri PhoneCONTENT_URI = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
        String Phone_CONTACT_ID = ContactsContract.CommonDataKinds.Phone.CONTACT_ID;
        String NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER;
    
        Uri EmailCONTENT_URI =  ContactsContract.CommonDataKinds.Email.CONTENT_URI;
        String EmailCONTACT_ID = ContactsContract.CommonDataKinds.Email.CONTACT_ID;
        String DATA = ContactsContract.CommonDataKinds.Email.DATA;
    
        Uri AdressCONTENT_URI =  ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI;
        String AdressCONTACT_ID = ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID;
    
        ContentResolver contentResolver = context.getContentResolver();
        Cursor cursor = contentResolver.query(CONTENT_URI, null,null, null, null);  
    
        if (cursor.getCount() > 0) {
            cursor.moveToNext();
            int hasPhoneNumber = Integer.parseInt(cursor.getString(cursor.getColumnIndex( HAS_PHONE_NUMBER )));
            outBuffer.append("<contact>");
    
            if (hasPhoneNumber > 0) {   
                outBuffer.append("<phonenumbers>");
                Cursor phoneCursor = contentResolver.query(PhoneCONTENT_URI, null, Phone_CONTACT_ID + " = ?", new String[] { contact_id }, null);
                if(phoneCursor != null)
                    while (phoneCursor.moveToNext()) {
    
                        outBuffer.append("<phonenumber>").
                                  append("<number>").
                                  append(phoneCursor.getString(phoneCursor.getColumnIndex(NUMBER))).
                                  append("</number>");
                        if(phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)) != null){
                             switch (Integer.valueOf(phoneCursor.getString(phoneCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)))) {
                               case ContactsContract.CommonDataKinds.Phone.TYPE_HOME:outBuffer.append("<type>").append("home").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE:outBuffer.append("<type>").append("mobile").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Phone.TYPE_WORK:outBuffer.append("<type>").append("work").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Phone.TYPE_FAX_WORK:outBuffer.append("<type>").append("work fax").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Phone.TYPE_FAX_HOME:outBuffer.append("<type>").append("home fax").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Phone.TYPE_PAGER:outBuffer.append("<type>").append("pager").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Phone.TYPE_OTHER:outBuffer.append("<type>").append("other").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Phone.TYPE_CUSTOM:outBuffer.append("<type>").append("custom").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Phone.TYPE_CALLBACK:outBuffer.append("<type>").append("callback").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Phone.TYPE_CAR:outBuffer.append("<type>").append("car").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Phone.TYPE_COMPANY_MAIN:outBuffer.append("<type>").append("company main").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Phone.TYPE_ISDN:outBuffer.append("<type>").append("ISDN").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Phone.TYPE_MAIN:outBuffer.append("<type>").append("main").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Phone.TYPE_ASSISTANT:outBuffer.append("<type>").append("assistant").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Phone.TYPE_MMS:outBuffer.append("<type>").append("mms").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Phone.TYPE_OTHER_FAX:outBuffer.append("<type>").append("other fax").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Phone.TYPE_RADIO:outBuffer.append("<type>").append("radio").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Phone.TYPE_TTY_TDD:outBuffer.append("<type>").append("TTY TDD").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Phone.TYPE_WORK_PAGER:outBuffer.append("<type>").append("workpager").append("</type>"); break;
                             }
                             outBuffer.append("</phonenumber>");
                        }
                    }
    
                outBuffer.append("</phonenumbers>");
                phoneCursor.close();
            }
                Cursor emailCursor = contentResolver.query(EmailCONTENT_URI,    null, EmailCONTACT_ID+ " = ?", new String[] { contact_id }, null);  
                outBuffer.append("<emails>");
                if(emailCursor != null)
                    while (emailCursor.moveToNext()) {
    
                        outBuffer.append("<infoemail>").
                                  append("<email>").
                                  append(ServerData.getStartcdataxml() + emailCursor.getString(emailCursor.getColumnIndex(DATA)) + ServerData.getEndcdataxml()).
                                  append("</email>");       
    
                        if(emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE))!= null){
                             switch (Integer.valueOf(emailCursor.getString(emailCursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)))) {
                               case ContactsContract.CommonDataKinds.Email.TYPE_HOME:outBuffer.append("<type>").append("home").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Email.TYPE_MOBILE:outBuffer.append("<type>").append("mobile").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Email.TYPE_WORK:outBuffer.append("<type>").append("work").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Email.TYPE_OTHER:outBuffer.append("<type>").append("other").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.Email.TYPE_CUSTOM:outBuffer.append("<type>").append("custom").append("</type>"); break;
    
                             }
                        }
                         outBuffer.append("</infoemail>");
                    }
                outBuffer.append("</emails>");
                emailCursor.close();
    
    
                Cursor adressCursor = contentResolver.query(AdressCONTENT_URI,  null, AdressCONTACT_ID+ " = ?", new String[] { contact_id }, null);                             
                outBuffer.append("<addresses>");
                if(adressCursor!=null)
                    while (adressCursor.moveToNext()) {
    
                        outBuffer.append("<address>").
                                  append("<street>").
                                  append(ServerData.getStartcdataxml() + adressCursor.getString(adressCursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET)) + ServerData.getEndcdataxml()).
                                  append("</street>").
                                  append("<city>").
                                  append(ServerData.getStartcdataxml() + adressCursor.getString(adressCursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY)) + ServerData.getEndcdataxml()).
                                  append("</city>").
                                  append("<country>").
                                  append(ServerData.getStartcdataxml() + adressCursor.getString(adressCursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY)) + ServerData.getEndcdataxml()).
                                  append("</country>").
                                  append("<postalcode>").
                                  append(ServerData.getStartcdataxml() + adressCursor.getString(adressCursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE)) + ServerData.getEndcdataxml()).
                                  append("</postalcode>").
                                  append("<neighborhood>").
                                  append(ServerData.getStartcdataxml() + adressCursor.getString(adressCursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.NEIGHBORHOOD)) + ServerData.getEndcdataxml()).
                                  append("</neighborhood>");    
                        if(adressCursor.getString(adressCursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE)) != null){
                            switch (Integer.valueOf(adressCursor.getString(adressCursor.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE)))) {
                               case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_HOME:outBuffer.append("<type>").append("home").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_WORK:outBuffer.append("<type>").append("work").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_OTHER:outBuffer.append("<type>").append("other").append("</type>"); break;
                               case ContactsContract.CommonDataKinds.StructuredPostal.TYPE_CUSTOM:outBuffer.append("<type>").append("custom").append("</type>"); break;
    
                               }
                        }
                         outBuffer.append("</address>");
    
                    }
                outBuffer.append("</addresses>");
    
                Cursor orgCursor = contentResolver.query(ContactsContract.Data.CONTENT_URI, null, ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?",new String[]{contact_id,
                        ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE}, null);        
                if(orgCursor!=null)
                    while (orgCursor.moveToNext()) {
                        outBuffer.append("<organization>").
                                  append("<company>").
                                  append(ServerData.getStartcdataxml() + orgCursor.getString(orgCursor.getColumnIndex(ContactsContract.CommonDataKinds.Organization.COMPANY)) + ServerData.getEndcdataxml()).
                                  append("</company>").
                                  append("<title>").
                                  append(ServerData.getStartcdataxml() + orgCursor.getString(orgCursor.getColumnIndex(ContactsContract.CommonDataKinds.Organization.TITLE)) + ServerData.getEndcdataxml()).
                                  append("</title>").
                                  append("</organization>");                
                    }
    
    
                orgCursor.close();
                outBuffer.append("</contact>");
                adressCursor.close();
    
    
        }
        return outBuffer.toString();
    }
    

    }

    【讨论】:

    • 有点难以理解,但还是谢谢你
    【解决方案2】:

    最后我发现了问题..我不得不用以下内容覆盖意图类型:

    intent.SetType (ContactsContract.CommonDataKinds.Phone.ContentType);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 2012-06-25
      • 2011-10-02
      • 1970-01-01
      相关资源
      最近更新 更多