I’m developing an IM app on Android. The aim is to have multi accounts and protocols compatibility.
I’m looking for a way to get the best status of a contact on Android.
I’ve got a list of account types supported. I have a function that takes a long (contact_id) and must return the best Account + best way to contact (e.g. somebody@jabber.org).
I already looked the documentation, and I know SQL already. But the documentation is a little messy on that point and I don’t know how to get the best way to send a message to a contact. Here is some code of what I’m trying to do:
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;
}
I can select all RawContacts that matter for my app but then I don’t know how to join and I can’t get a clear schema of the database. I don’t know how to access StatusUpdate from there. The aim is like ORDER BY presence.
Is there an easy way to do that? Is there a way to manipulate Contacts like normal Object via something like an ORM? Or do we have a mechanism to create and manage our own IM protocols easily on Android?
With time I found it. We can use the last parameter of ContentProvider.query(…, sort); to have the best RawContact Presence first for a given Contact. For those who still search here is the code
You can also use the predifined field of the contact table with automatic best status for a given contact.