Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android联系人操作_Android_Sqlite_Orm_Contact_Accountmanager - Fatal编程技术网

Android联系人操作

Android联系人操作,android,sqlite,orm,contact,accountmanager,Android,Sqlite,Orm,Contact,Accountmanager,我正在Android上开发一个IM应用程序。其目的是实现多帐户和协议的兼容性。 我正在寻找一种在Android上获得联系人最佳状态的方法。 我有一个支持的帐户类型列表。我有一个需要长联系人id的功能,必须返回最佳帐户+最佳联系方式,例如。somebody@jabber.org. 我已经看过文档了,我已经知道SQL了。但是文档在这一点上有点混乱,我不知道如何获得向联系人发送消息的最佳方式。以下是我尝试做的一些代码: 公共静态帐户bestContext上下文,长联系人 { 最终ContentReso

我正在Android上开发一个IM应用程序。其目的是实现多帐户和协议的兼容性。 我正在寻找一种在Android上获得联系人最佳状态的方法。 我有一个支持的帐户类型列表。我有一个需要长联系人id的功能,必须返回最佳帐户+最佳联系方式,例如。somebody@jabber.org.

我已经看过文档了,我已经知道SQL了。但是文档在这一点上有点混乱,我不知道如何获得向联系人发送消息的最佳方式。以下是我尝试做的一些代码:

公共静态帐户bestContext上下文,长联系人 { 最终ContentResolver解析器=context.getContentResolver; 最终光标rawscontacts=resolver.queryrawscontacts.CONTENT\u URI, 新字符串[]{RawContacts.\u ID}, RawContacts.CONTACT_ID+=?和+RegisteredProtocols选择, 新字符串[]{String.valueOfcontact},null; whilerawContacts.moveToNext { 最终长rawContactId=rawContacts.getLong0; Uri rawContactUri=ContentUris.withAppendedIdRawContacts.CONTENT\u Uri,rawContactId; Uri entityUri=Uri.withAppendedPathrawContactUri,Entity.CONTENT\u目录; 游标rawContact=resolver.queryentityUri, 新字符串[]{rawscontacts.SOURCE_ID,Entity.DATA_ID,Entity.MIMETYPE,Entity.DATA1}, 空,空,空,; } 返回null; } 我可以选择对我的应用程序有影响的所有联系人,但我不知道如何加入,也无法获得数据库的清晰模式。我不知道如何从那里访问StatusUpdate。目标就像存在的秩序


有没有一个简单的方法?有没有办法像普通物体一样通过ORM这样的东西操纵接触?或者我们是否有一种机制可以在Android上轻松创建和管理我们自己的IM协议?

随着时间的推移,我发现了它。我们可以使用ContentProvider.query…,sort的最后一个参数;首先为给定联系人提供最佳联系人状态。对于那些仍然在这里搜索的人来说,这是代码

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

您还可以使用联系人表的预定义字段,为给定联系人自动设置最佳状态。

我在研究ORMLite时发现,该字段对我有很大帮助。有人知道Android中联系人的sqlite DB模式吗?或者更好的是,有人知道一个带有正确注释的Contact类来获取数据吗?