1# 管理系统账号(仅对系统应用开放)
2
3系统提供了用于管理系统账号的接口。
4系统应用开发者在申请对应的权限后,可以创建、激活、修改和删除系统账号,实现对系统账号的生命周期管理;三方应用开发者可以查询系统账号的基本信息,以完成与系统账号相关的业务逻辑开发。
5
6## 基本概念
7
8### 账号类型
9
10当前,系统仅允许创建以下预定义类型的系统账号:
11| 名称   | 值 | 说明         |
12| ------ | ------ | ----------- |
13| ADMIN  | 0      | 管理员账号。 |
14| NORMAL | 1      | 普通账号。   |
15| GUEST  | 2      | 访客账号。   |
16| PRIVATE<sup>12+</sup> | 1024  | 隐私账号。   |
17
18### 账号完整信息
19
20系统账号的完整信息请参考[OsAccountInfo](../../reference/apis-basic-services-kit/js-apis-osAccount.md#osaccountinfo)定义。
21
22## 开发准备
23
241. 申请权限:ohos.permission.MANAGE_LOCAL_ACCOUNTS。申请流程请参考:[申请应用权限](../../security/AccessToken/determine-application-mode.md#system_basic等级应用申请权限的方式)。
25
262. 导入系统账号模块。
27
28   ```ts
29   import { osAccount, BusinessError } from '@kit.BasicServicesKit';
30   ```
31
323. 获取账号管理单实例对象。
33
34   ```ts
35   let accountManager = osAccount.getAccountManager();
36   ```
37
38## 创建系统账号
39
40系统初始化阶段,会创建默认系统账号。此外,可以创建多个系统账号,以满足用户不同诉求。
41
42具体开发实例如下:
43
44调用[createOsAccount](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#createosaccount)接口,指定昵称和类型信息来创建系统账号。
45
46```ts
47let name: string = 'Bob';
48let type: osAccount.OsAccountType = osAccount.OsAccountType.NORMAL;
49
50accountManager.createOsAccount(name, type, (err: BusinessError, osAccountInfo: osAccount.OsAccountInfo)=>{
51  console.log('createOsAccount err:' + JSON.stringify(err));
52  console.log('createOsAccount osAccountInfo:' + JSON.stringify(osAccountInfo));
53});
54```
55
56## 查询所有已创建的系统账号
57
58账号管理界面通常需要获取所有账号信息时,以方便用户操作不同账号。
59
60具体开发实例如下:
61
62调用[queryAllCreatedOsAccounts](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#queryallcreatedosaccounts)接口查询全量账号。
63
64```ts
65accountManager.queryAllCreatedOsAccounts((err: BusinessError, accountArr: osAccount.OsAccountInfo[])=>{
66  console.log('queryAllCreatedOsAccounts err:' + JSON.stringify(err));
67  console.log('queryAllCreatedOsAccounts accountArr:' + JSON.stringify(accountArr));
68});
69```
70
71## 查询指定系统账号信息
72
73除了查询所有账号信息,还可以根据账号标识查询指定系统账号的详细信息。
74
75具体开发实例如下:
76
77调用[queryOsAccountById](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#queryosaccountbyid)接口查询指定账号的详细信息。
78
79```ts
80let localId: number = 100;
81accountManager.queryOsAccountById(localId, (err: BusinessError, accountInfo: osAccount.OsAccountInfo)=>{
82  console.log('queryOsAccountById err:' + JSON.stringify(err));
83  console.log('queryOsAccountById accountInfo:' + JSON.stringify(accountInfo));
84});
85```
86
87## 修改系统账号头像和昵称
88
89可以修改系统账号的头像、昵称,以满足用户的个性化需求。
90
91具体开发实例如下:
92
931. 调用[setOsAccountProfilePhoto](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#setosaccountprofilephoto)接口修改系统账号头像。
94
95   ```ts
96   let localId: number = 100;
97   let newPhoto: string = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAAPCAYAAAA/I0V3AAAAAXNSR0IArs4c6QAAAARnQU1BAA'+
98   'Cxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACwSURBVDhPvZLBDYMwDEV/ugsXRjAT0EHCOuFIBwkbdIRewi6unbiAyoGgSn1SFH85+Y'+
99   'q/4ljARW62X+LHS8uIzjm4dXUYF+utzBikB52Jo5e5iEPKqpACk7R9NM2RvWm5tIkD2czLCUFNKLD6IjdMHFHDzws285MgGrT0xCtp3WOKHo'+
100   '+7q0mP0DZW9pNmoEFUzrQjp5cCnaen2kSJXLFD8ghbXyZCMQf/8e8Ns1XVAG/XAgqKzVnJFAAAAABJRU5ErkJggg=='
101
102   accountManager.setOsAccountProfilePhoto(localId, newPhoto, (err: BusinessError)=>{
103     console.log('setOsAccountProfilePhoto err:' + JSON.stringify(err));
104   });
105   ```
106
1072. 调用[setOsAccountName](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#setosaccountname)接口修改系统账号名称。
108
109   ```ts
110   let localId: number = 100;
111   let newName: string = 'Tom';
112   accountManager.setOsAccountName(localId, newName, (err: BusinessError) => {
113     if (err) {
114       console.log('setOsAccountName failed, error: ' + JSON.stringify(err));
115     } else {
116       console.log('setOsAccountName successfully');
117     }
118   });
119   ```
120
121## 激活系统账号
122
123系统账号默认处于未激活状态,需要激活后才能使用。开发者可以使用[activateOsAccount](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#activateosaccount)接口完成此操作。
124
125具体开发实例如下:
126
127调用[activateOsAccount](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#activateosaccount)接口激活指定系统账号。
128
129```ts
130let localId: number = 101;
131accountManager.activateOsAccount(localId, (err: BusinessError)=>{
132  if (err) {
133    console.error(`activateOsAccount failed, code is ${err.code}, message is ${err.message}`);
134  } else {
135    console.log('activateOsAccount successfully');
136  }
137});
138```
139
140## 删除系统账号
141
142不再使用某个系统账号时,可以将该系统账号删除。
143
144具体开发实例如下:
145
146调用[removeOsAccount](../../reference/apis-basic-services-kit/js-apis-osAccount-sys.md#removeosaccount)接口删除指定的账号。
147
148```ts
149let localId: number = 101;
150accountManager.removeOsAccount(localId, (err: BusinessError)=>{
151  if (err) {
152      console.log('removeOsAccount failed, error: ' + JSON.stringify(err));
153  } else {
154      console.log('removeOsAccount successfully');
155  }
156});
157```
158