2012-05-01 3 views
0

Я разрабатываю приложение IM на Android. Цель состоит в том, чтобы обеспечить совместимость нескольких учетных записей и протоколов. Я ищу способ получить лучший статус контакта на Android. У меня есть список поддерживаемых типов аккаунтов. У меня есть функция, которая занимает длинный (contact_id) и должна вернуть лучший Account + лучший способ связи (например, [email protected]).Управление контактами с Android

Я уже посмотрел документацию, и я уже знаю SQL. Но документация немного беспорядочна в этом вопросе, и я не знаю, как получить лучший способ отправить сообщение контакту. Вот код, что я пытаюсь сделать:

public static Account best(Context context, long contact) 
{ 
    final ContentResolver resolver = context.getContentResolver(); 
    final Cursor rawContacts = resolver.query(RawContacts.CONTENT_URI, 
       new String[]{RawContacts._ID}, 
       RawContacts.CONTACT_ID + "=? AND " + registeredProtocolsSelection(), 
       new String[]{String.valueOf(contact)}, null); 
    while(rawContacts.moveToNext()) 
    { 
     final long rawContactId = rawContacts.getLong(0); 
     Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, rawContactId); 
     Uri entityUri = Uri.withAppendedPath(rawContactUri, Entity.CONTENT_DIRECTORY); 
     Cursor rawContact = resolver.query(entityUri, 
        new String[]{RawContacts.SOURCE_ID, Entity.DATA_ID, Entity.MIMETYPE, Entity.DATA1}, 
        null, null, null); 
    } 
    return null; 
} 

я могу выбрать все RawContacts, которые важны для моего приложения, но тогда я не знаю, как присоединиться, и я не могу получить четкую схему базы данных. Я не знаю, как получить доступ к StatusUpdate оттуда. Цель подобна ORDER BY presence.

Есть ли простой способ сделать это? Есть ли способ манипулировать контактами, как обычный объект, с помощью ORM? Или у нас есть механизм для создания и управления нашими собственными протоколами обмена мгновенными сообщениями на Android?

+0

Я нашел во время своих исследований ORMLite, которые могут мне очень помочь. Кто-нибудь знает схему базы данных sqlite для контактов в Android? Или лучше кто-нибудь знает о классе контактов с правильными аннотациями, чтобы получить данные? – grea09

ответ

0

Со временем я нашел его. Мы можем использовать последний параметр ContentProvider.query (..., sort); чтобы иметь лучшее присутствие RawContact для данного контакта. Для тех, кто до сих пор найти здесь код

final Cursor cursor = contentResolver.query 
(
    StatusUpdates.CONTENT_URI, 
    new String[] 
    { 
     StatusUpdates.PRESENCE, 
     StatusUpdates.STATUS_LABEL, 
     StatusUpdates.STATUS_RES_PACKAGE 
    }, 
    Data.CONTACT_ID + "=? AND " + Data.MIMETYPE + "=?", 
    new String[] 
    { 
     Long.toString(id), 
     CommonDataKinds.Im.CONTENT_ITEM_TYPE 
    }, 
    StatusUpdates.STATUS_TIMESTAMP + " DESC" // For last Or 
    StatusUpdates.PRESENCE + " DESC" // For presence 
); 
if(cursor!=null && cursor.moveToFirst()) 
{ 
    presence = Presence.get(cursor.getLong(0)); 
    status = Utils.Contact.status(cursor.getInt(1), cursor.getString(2)); 
} 
if(cursor!=null) 
{ 
    cursor.close(); 
} 

Вы также можете использовать predifined поле контактной таблицы с автоматическим лучшим состоянием для данного контакта.

Смежные вопросы