2012-05-01 24 views
0

私はAndroid上でIMアプリケーションを開発しています。目的は、複数のアカウントとプロトコルの互換性を持つことです。 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のようなものを介して、通常のオブジェクトのように連絡先を操作する方法はありますか?あるいは、私たちは自分のIMプロトコルをAndroidで簡単に作成して管理する仕組みを持っていますか?

+0

私の研究中にORMLiteが見つかりました。誰もAndroidの連絡先のsqlite DBのスキーマを知っていますか? また、データを取得するための正しい注釈を持つContactクラスについて知っている人はいますか? – grea09

答えて

0

時間とともに私はそれを見つけました。 ContentProvider.query(...、sort)の最後のパラメータを使用できます。指定された連絡先のRawContactプレゼンスを最初に取得する。まだ検索する人のためにあなたはまた、特定の連絡先の自動最良の状態で接触テーブルのpredifinedフィールドを使用することができ、コード

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

です。