Фон
Предположим, у меня есть контакт на устройстве (или я собираюсь его создать), который я хочу сохранить в учетной записи Google, чтобы он синхронизировался с ним. Я также хочу, чтобы пользователь мог выбирать, в какую учетную запись сохранять.
Вот что показывает устройство Samsung при создании нового контакта:
Если на устройстве также есть учетная запись Samsung, она также будет отображаться в этом диалоговом окне.
Эта проблема
Я узнал, как вставить новый (здесь), но насколько я помню , изменение существующего контакта разрешено только в определенных случаях (возможно, только если контакт находится в самом устройстве / SIM-карте, а не в других учетных записях).
Я также не могу найти способ получить список учетных записей для сохранения (устройство, sim, google, ...)
Что я нашел
Я запустил этот код на устройстве Samsung, на котором есть контакты на SIM-карте, в хранилище и в учетных записях Google:
final Map<String, String> result = new HashMap<>();
final Cursor cursor = getContentResolver()
.query(ContactsContract.RawContacts.CONTENT_URI, new String[]{RawContacts.ACCOUNT_TYPE, RawContacts.ACCOUNT_NAME},
null, null,
null);
final int accountNameIdx = cursor.getColumnIndex(RawContacts.ACCOUNT_NAME);
final int accountTypeIdx = cursor.getColumnIndex(RawContacts.ACCOUNT_TYPE);
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
result.put(cursor.getString(accountTypeIdx), cursor.getString(accountNameIdx));
}
cursor.close();
Log.d("AppLog", "accounts found:");
for (Entry<String, String> account : result.entrySet())
Log.d("AppLog", account.getKey() + ":" + account.getValue());
И вот результат:
vnd.sec.contact.sim:primary.sim.account_name
com.google:[email protected]
vnd.sec.contact.phone:vnd.sec.contact.phone
Но, как я обнаружил (здесь), учетные записи sim / устройства могут отличаться на различных устройствах.
Вопросы
Как правильно изменить существующий контакт, чтобы его ACCOUNT_TYPE принадлежал Google?
Получает ли использование первого элемента следующего кода основную учетную запись пользователя Google, так что мне следует подумать об ее использовании:
AccountManager.get(context).getAccountsByType("com.google")
?
Есть ли способ проверить, что для найденной учетной записи включена автосинхронизация, а если нет, использовать намерение перейти на экран, чтобы синхронизировать его? Можно ли запустить синхронизацию после изменения контакта, если автосинхронизация не включена?
Есть ли способ получить все доступные учетные записи, которые могут быть установлены для контакта (включая sim / local), чтобы я мог представить пользователю диалоговое окно для выбора, в какой учетной записи сохранить контакт? Будет "getAccounts "достаточно, или мне как-то отфильтровать результаты?
РЕДАКТИРОВАТЬ: для # 4 кажется, что "getAccounts" не предоставляет мне sim и local в качестве возможных учетных записей для сохранения. Тем не менее, я хочу знать, как их получить, чтобы предложить пользователю выбрать их.