0

Android で IM アプリを開発しています。目的は、複数のアカウントとプロトコルの互換性を持つことです。Android で連絡先の最高のステータスを取得する方法を探しています。サポートされているアカウントの種類のリストがあります。長い ( ) が必要な関数があり、最適な+ 最適な連絡方法 (例: ) をcontact_id返す必要があります。Accountsomebody@jabber.org

私はすでにドキュメントを見て、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 で独自の IM プロトコルを簡単に作成および管理するメカニズムはありますか?

4

1 に答える 1

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();
}

連絡先テーブルの定義済みフィールドを、特定の連絡先の自動最適ステータスと共に使用することもできます。

于 2012-07-30T12:05:13.393 に答える