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

В любом случае, я пытаюсь написать о своих проблемах в программировании для Android, и это мой первый пост на Medium о получении контактов на устройствах Android.

так давайте сделаем это…

Я разработчик Android в iGap.net, иранском мессенджере, и одной из моих задач был импорт и синхронизация контактов с сервером после получения разрешения от пользователя, чтобы определить, какой контакт находится в iGap, а какой нет.

Итак, я работал над последним кодом, который написали бывшие сотрудники, и когда я проверил их код, это был долгий процесс, когда контактов было более 5000. и он запускается в асинхронном потоке с 3 минутами при каждом входе в систему и без проверки для отправки только новых контактов, а не всех:/.

Я искал и писал код, который запускается за 0,5 секунды, но возникла проблема, из-за которой контакт с более чем одним номером телефона не извлекался.

Итак, я написал новый код, который выполняется за 0,9 секунды. поэтому проверьте и создайте хеш (используя MD5), чтобы определить, происходят ли какие-либо изменения (обновление, удаление, вставка контакта), синхронизируйте изменения и поделитесь только новым контактом с сервером.

private String createContactsHash(List<StructContact> contacts){
    return md5(new Gson().toJson(contacts));
}
private String md5(String s) {
    try {
        // Create MD5 Hash
        MessageDigest digest = 
             java.security.MessageDigest.getInstance("MD5");
        digest.update(s.getBytes());
        byte[] messageDigest = digest.digest();

        // Create Hex String
        StringBuffer hexString = new StringBuffer();
        for (int i = 0; i < messageDigest.length; i++){
            hexString.append(
                Integer.toHexString(0xFF & messageDigest[i])
            );
        }
        return hexString.toString();
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
    return "";
}

И коды для выборки контактов использовались с помощью Cursor и Content Resolver, и более важными вещами является проекция, чтобы определить, какие поля вам нужно получить из телефонной книги.

вот и все, теперь вы можете получать тысячи контактов менее чем за секунду.

Я надеюсь, что это было полезно для вас, и дайте мне знать, если у вас возникнут проблемы с кодом или моим сообщением.