---
# System prepended metadata

title: Android SDK API Doc
tags: [android]

---

# Android SDK API Doc

## User
### ProfileService API
#### 通过登录session获取ProfileService对象
```kotlin
val profileService = session.profileService()
```

#### 1、设置用户昵称
```kotlin
suspend fun setDisplayName(userId: String, newDisplayName: String)
```

#### 2、设置用户头像
```kotlin
suspend fun updateAvatar(userId: String, newAvatarUri: Uri, fileName: String)
```

#### 3、设置用户描述
```kotlin
suspend fun setProfileBio(userId: String, bio: String)
```
入参：

| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| userId | string | 用户id | true     |
| bio | string | 用户描述 | true     |

出参: 无

#### 3、获取用户Profile
```kotlin
suspend fun getProfile(userId: String): JsonDict
```
入参：

| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| userId | string | 用户id | true     |

出参:
| Type   | Description | Required |
| :----- | :---------- | :------- |
| JsonDict | 用户profile键值对 | true     |

JsonDict类型字段：
| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| displayname | string | 用户名称 | true     |
| avatar_url | string | 用户头像 | true     |
| bio | string | 用户描述 | true     |
| wallet_address | string | 钱包地址 | true     |


### AccountDataService API

#### 通过登录session获取AccountDataService对象
```kotlin
val accountDataService = session.accountDataService()

```

#### 1、设置account data
该方法可设置用户相关的自定义数据，content为对应type下的全量数据。

```kotlin
suspend fun updateUserAccountData(type: String, content: Content)
```

入参：

| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| type | string | 数据类型（可自定义） | true     |
| content | Content | key/value pairs    | true     |

出参：无


#### 2、获取account data

```kotlin
fun getUserAccountDataEvent(type: String): UserAccountDataEvent?
```

入参：

| Name    | Type   | Description                            | Required |
| :------ | :----- | :------------------------------------- | :------- |
| type | string | 数据类型 | true     |

出参 UserAccountDataEvent：
| Name    | Type   | Description                            | Required |
| :------ | :----- | :------------------------------------- | :------- |
| type | string | 数据类型 | true     |
| content | Content | key/value pairs    | true     |

### UserService API

#### 通过登录session获取UserService对象
```kotlin
val userService = session.userService()

```

#### 1、获取联系人列表

```kotlin
suspend fun getContacts(): List<ContactInfo>
```
入参：无

出参：
| Type   | Description | Required |
| :----- | :---------- | :------- |
| List<ContactInfo> | 联系人信息列表 | true     |

ContactInfo类型字段：
| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| contactId | String | 联系人id | true  |
| displayName | String | 联系人名称 | false  |
| avatarUrl | String | 联系人头像 | false  |
| walletAddress | String | 钱包地址 | false  |
| tags | String array | 标签数组 | false  |

#### 2、添加联系人

```kotlin
suspend fun addContact(contactId: String, tags: List<String> = listOf())
```
入参：

| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| contactId | String | 联系人id | true  |
| tags | String array | 标签数组 | false  |

出参：无

#### 2、删除联系人

```kotlin
suspend fun removeContact(contactId: String)
```
入参：

| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| contactId | String | 联系人id | true     |

出参：无


---


## Room
### RoomService API
#### 通过登录session获取AccountDataService对象
```kotlin
val roomService = session.roomService()

```
#### 1、创建私聊房间
```kotlin
suspend fun createDirectRoom(otherUserId: String): String
```

入参：

| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| otherUserId | string | 对方用户id | true     |

出参:
| Type   | Description | Required |
| :----- | :---------- | :------- |
| string | 房间id | true     |

#### 2、创建普通房间
```
suspend fun createRoom(createRoomParams: CreateRoomParams): String
```
入参：

| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| createRoomParams | CreateRoomParams | 房间参数 | true     |

CreateRoomParams类型：
| Name    | Type   | Description |
| :------ | :----- | :---------- |
| name | string | 房间名称 |
| topic | string | 房间主题 |
| avatarUri | Uri | 房间头像 |
| invitedUserIds | string array | 邀请用户id数组 |
| preset | CreateRoomPreset | 房间预置状态 |

CreateRoomPreset枚举类型：
| Value    | Description |
| :------ | :----- |
| PRESET_PUBLIC_CHAT | 公开房间，不需要邀请就可以join |
| PRESET_PRIVATE_CHAT | 私有房间，需要邀请才能join |
| PRESET_TRUSTED_PRIVATE_CHAT | 私有房间，用于单聊 |

出参:
| Type   | Description | Required |
| :----- | :---------- | :------- |
| string | 房间id | true     |

#### 3、加入房间
```kotlin
suspend fun joinRoom(
            roomId: String,
            reason: String? = null,
            viaServers: List<String> = emptyList()
    )
```

入参：

| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| roomId | string | 房间Id | true     |
| reason | string | 加入原因 | false     |
| viaServers | string array | server domain数组 | false     |

出参:
| Type   | Description | Required |
| :----- | :---------- | :------- |
| string | 房间id | true     |


#### 4、离开房间
```kotlin
suspend fun leaveRoom(roomId: String, reason: String? = null)
```

入参：
| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| roomId | string | 房间Id | true     |
| reason | string | 离开原因 | false     |

出参: 无


#### 5、与钱包地址创建私聊房间
如果已经存在私聊房间，则返回已存在的房间id
```kotlin
suspend fun createDmByWalletAddress(address: String): String
```

**Input parameter:**

| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| address | string | 对方用户钱包地址 | true     |

**Output parameter:**
| Type   | Description | Required |
| :----- | :---------- | :------- |
| string | 房间id | true     |


#### 6、删除房间
仅房间Owner有权限删除房间
```kotlin
suspend fun deleteRoom(roomId: String, reason: String? = null)
```

**Input parameter:**
| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| roomId | string | 房间Id | true     |
| reason | string | 删除原因 | false     |

**Output parameter:** None
    
#### 7、隐藏房间
隐藏的房间不显示在房间列表，收到新消息后自动显示，取消隐藏
```kotlin
suspend fun hideRoom(roomId: String)
```

**Input parameter:**
| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| roomId | string | 房间Id | true     |

**Output parameter:** None

#### 8、显示房间
重新显示隐藏的房间
```kotlin
suspend fun showRoom(roomId: String)
```

**Input parameter:**
| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| roomId | string | 房间Id | true     |

**Output parameter:** None

#### 9、获取私聊房间
```kotlin
fun getExistingDirectRoomWithUser(otherUserId: String): String?
```

**Input parameter:**
| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| otherUserId | string | 私聊用户id|true|

**Output parameter:**
| Type   | Description | Required |
| :----- | :---------- | :------- |
| string | 私聊房间id|false|


### RoomPushRuleService API

#### 通过Room对象获取RoomPushRuleService对象
```kotlin
val roomPushRuleService = room.roomPushRuleService()
```

#### 1、设置房间通知状态
```kotlin
suspend fun setRoomNotificationState(roomNotificationState: RoomNotificationState)
```

入参：

| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| roomNotificationState | RoomNotificationState | 通知状态 | true |

RoomNotificationState枚举类型：
| Value    | Description |
| :------ | :---------- |
| ALL_MESSAGES | 全部消息触发通知 |
| MENTIONS_ONLY | 被@时触发通知 |
| MUTE | 没有通知 |


出参：无

#### 2、获取房间通知状态
```kotlin
fun getLiveRoomNotificationState(): LiveData<RoomNotificationState>
```

入参：无

出参：
| Type   | Description | Required |
| :----- | :---------- | :------- |
| RoomNotificationState | 通知状态 | true |

### TagService API

#### 通过Room对象获取TagService对象
```kotlin
val tagService = room.tagService()

```

#### 1、添加tag
```kotlin
suspend fun addTag(tag: String, order: Double?)
```

入参：

| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| tag | string | 标签名称 | true |
| order | double | 0-1之间的数字，表示指定tag下的房间相对位置（越小越靠前） | false |

出参：无


#### 2、删除tag
```kotlin
suspend fun deleteTag(tag: String)
```
入参：

| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| tag | string | 标签名称 | true |

出参：无

### SendService API

#### 通过Room对象获取SendService对象
```kotlin
val sendService = room.sendService()

```

#### 1、发送文本
```kotlin
    fun sendTextMessage(
            text: CharSequence,
            msgType: String = MessageType.MSGTYPE_TEXT,
            autoMarkdown: Boolean = false,
            additionalContent: Content? = null,
    ): Cancelable
```

入参：

| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| text | string | 文本内容 | true |
| msgType | string | 消息类型，默认text | true |
| autoMarkdown | boolean | 是否支持markdown，默认false | true |
| additionalContent | Content | additional content | false |

出参：
| Type   | Description | Required |
| :----- | :---------- | :------- |
| Cancelable | 可取消对象 | true |

#### 2、发送图片
```kotlin
    fun sendMedia(
            attachment: ContentAttachmentData,
            compressBeforeSending: Boolean,
            roomIds: Set<String>,
            rootThreadEventId: String? = null,
            relatesTo: RelationDefaultContent? = null,
            additionalContent: Content? = null,
    ): Cancelable
```

### LocationSharingService API

#### 通过Room对象获取LocationSharingService对象
```kotlin
val locationSharingService = room.locationSharingService()

```

#### 1、发送静态location消息
```kotlin
suspend fun sendStaticLocation(latitude: Double, longitude: Double, uncertainty: Double?, isUserLocation: Boolean): Cancelable
```
入参：

| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| latitude | double | latitude of the location | true |
| longitude | double | longitude of the location | true |
| uncertainty | double | Accuracy of the location in meters | false |
| isUserLocation | boolean | indicates whether the location data corresponds to the user location or not (pinned location) | true |

出参：
| Type   | Description | Required |
| :----- | :---------- | :------- |
| Cancelable | 可取消对象 | true |

#### 1、发送动态location消息
```kotlin
suspend fun sendLiveLocation(beaconInfoEventId: String, latitude: Double, longitude: Double, uncertainty: Double?): Cancelable
```
入参：

| Name    | Type   | Description | Required |
| :------ | :----- | :---------- | :------- |
| beaconInfoEventId | string | event id of the initial beacon info state event | true |
| latitude | double | latitude of the location | true |
| longitude | double | longitude of the location | true |
| uncertainty | double | Accuracy of the location in meters | false |

出参：
| Type   | Description | Required |
| :----- | :---------- | :------- |
| Cancelable | 可取消对象 | true |