Я хочу написать статьи для 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, и более важными вещами является проекция, чтобы определить, какие поля вам нужно получить из телефонной книги.
вот и все, теперь вы можете получать тысячи контактов менее чем за секунду.
Я надеюсь, что это было полезно для вас, и дайте мне знать, если у вас возникнут проблемы с кодом или моим сообщением.