Android не может получить контакты с некоторых телефонов - PullRequest
2 голосов
/ 06 марта 2012

Я написал приложение, которое должно читать контакты с телефона пользователя.Поскольку я выпустил его на рынок, несколько пользователей сказали мне, что мое приложение не может прочитать их список контактов (появляется сообщение об ошибке, в котором говорится, что оно не может получить список контактов).

Примерно80% пользователей, все работает нормально, но у других есть эта проблема.

В моей MainActivity я вызываю метод: GetContacts()

Если этот метод не возвращает контактов, я вызываю: GetContacts2()

Если приложение по-прежнему не может получить контакты, появляется всплывающее сообщение об ошибке.Ниже приведены два метода, которые я использую.Некоторые из телефонов, это не работает, это Droid X2 и HTC Incredible.

Я также устанавливаю требуемый уровень API в моем манифесте на 8, чтобы исключить старые телефоны.У меня также нет файлов журналов от этих пользователей.

ПРИМЕЧАНИЕ. Я удалил дополнительный код, который просто помещает контакты в массив для простоты.

Любые идеи о том, почему эти методы нене работает на всех телефонах?

Любая помощь будет принята с благодарностью !!

Mark

private void GetContacts()
{
    try
    {
        Context context = getApplicationContext(); 
        Cursor cursor = context.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 

        while (cursor.moveToNext()) 
        { 
            contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
            contactName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
            hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 

            if (Integer.parseInt(hasPhone)==1) 
            { 
                Cursor phone = context.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, 
                null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null); 

                while (phone.moveToNext())
                {   
                    phoneNo = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    phoneType = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                }
            } 
        }
    }
    catch (Exception e)
    {
    }
}   

private void GetContacts2()
{
    try
    {
        ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

        if (cur.getCount() > 0) 
        {
            while (cur.moveToNext()) 
            {
                contactId = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                contactName = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
                {
                     if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) 
                     {
                         Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = ?", new String[]{contactId}, null);
                         while (pCur.moveToNext()) 
                         {
                            phoneNo = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                            phoneType = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                         } 

                         pCur.close();
                    }
                }
            }
        }
    }
    catch (Exception e)
    {
    }
}

Ответы [ 2 ]

0 голосов
/ 06 марта 2012
  //declaration   
Cursor cursor;
int cNameIndex = 0;
int cNumIndex = 0;
String [] arrPosDrawn= null;


//oncreate  
TelephonyManager telMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        int simState = telMgr.getSimState();
                switch (simState) {
                    case TelephonyManager.SIM_STATE_ABSENT:
                        AlertDialog.Builder alert = new AlertDialog.Builder(
                                ContactList.this);

                        alert.setMessage("Please insert Sim card.")
                                .setTitle("Alert")

                                .setNeutralButton("OK",
                                        new DialogInterface.OnClickListener() {

                                            public void onClick(
                                                    DialogInterface dialog,
                                                    int which) {
                                                // TODO Auto-generated method stub

                                            }
                                        }).show();
                        break;
                    case TelephonyManager.SIM_STATE_READY:
                        cursor = refreshContactsCursor();
                         //contacts.setAdapter(new EfficientAdapter(this));
                        break;  
                }
//function
public Cursor refreshContactsCursor()
    {
        cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null);
        startManagingCursor(cursor);
        cursor.moveToFirst();
        cNameIndex = cursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME);
        cNumIndex = cursor.getColumnIndex(ContactsContract.Data.DATA1);
        arrPosDrawn = new String[cursor.getCount() - 1];
        for (int j=0; j < arrPosDrawn.length; j++) 
        {
            arrPosDrawn[j] = "";

        }
        return cursor;  
    }
0 голосов
/ 06 марта 2012

Я согласен. Исключения определенно не должны быть отброшены. Они исключения; они указывают на то, что что-то серьезно не так и на что нужно смотреть. Я рекомендую вам хотя бы зарегистрировать их, чтобы пользователи, столкнувшиеся с проблемами, могли отправить вам LogCat. Если вы не хотите, чтобы ваши пользователи сталкивались с этой проблемой, запишите данные в файл на SD-карте (общедоступный), чтобы они могли получить к нему доступ и отправить его вам.

...