Не удалось найти метаданные приложений-контактов android.provider.CONTACTS_STRUCTURE - PullRequest
0 голосов
/ 19 декабря 2018

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

        public static final String SYNC_META_DATA = "android.content.SyncAdapter";

    public static final String[] METADATA_CONTACTS_NAMES = new String[] {
            "android.provider.ALTERNATE_CONTACTS_STRUCTURE",
            "android.provider.CONTACTS_STRUCTURE"
    };

final Intent intent = new Intent(SYNC_META_DATA).setPackage(resPackageName);
        final List<ResolveInfo> intentServices =
                        pm.queryIntentServices(intent, PackageManager.GET_META_DATA);
        if (intentServices != null) {
            for (final ResolveInfo resolveInfo : intentServices) {
                final ServiceInfo serviceInfo = resolveInfo.serviceInfo;
                if (serviceInfo == null) {
                    continue;
                }
                for (String metadataName : METADATA_CONTACTS_NAMES) {
                    final XmlResourceParser parser = serviceInfo.loadXmlMetaData(
                            pm, metadataName);
                    if (parser != null) {
                        return parser;
                    }
                }
            }
        }

, но я всегда получаю синтаксический анализатор XmlResourceParser как ноль.поэтому, пожалуйста, помогите мне, как я могу получить список контактов для записи в Android

1 Ответ

0 голосов
/ 20 декабря 2018

Для этого есть API, вам нужно перебрать все SyncAdapters и проверить, имеют ли они supportUploading и имеют ли ContactsContract.AUTHORITY полномочия:

final SyncAdapterType[] syncs = ContentResolver.getSyncAdapterTypes();
for (SyncAdapterType sync : syncs) {
    Log.d(TAG, "found SyncAdapter: " + sync.accountType);
    if (ContactsContract.AUTHORITY.equals(sync.authority)) {
        Log.d(TAG, "SyncAdapter supports contacts: " + sync.accountType + " - supportsUploading=" + sync.supportsUploading());
    }
}

supportsUploading означает, что это дваспособ синхронизации, т. е. пользователь может изменить контакт на своем устройстве и синхронизировать изменения с учетной записью своего облака.

...