用户管理
用户管理
用户管理分为在线用户和本地用户,在线用户以企业号为颗粒度形成一个组别,每个组别里的用户互不干扰;离线用户数据则存储在机器人本体,可在未开启在线用户时,并且无网络情况下进行使用。
用户管理是否开启在线用户由CBIS推送而决定的,在用户管理第一次启动时会主动请求查询是否开启的状态。在线和离线必须二选一,数据不互通
查询用户信息时可分为查询在线用户信息和离线用户信息
初始化
- 用户管理访问代理对象,使用前如下进行初始化UserManager对象:
UserManager userManager=UserManager.getInstance(this);
获取用户信息
获取本地所有的用户信息:
java userManager.getUsers(new UserListenrAbstract/*[1]*/(){ @Override public void getUsers(List<User> users/*[2]*/) { } });
[1]UserListenrAbstract是实现了UserManagerListenr接口的抽象类,需要用到哪个回调重写那一个方法即可
UserManagerListenr接口方法如下:
java public interface UserManagerListenr { //获取本地所有的用户信息 void getUsers(List<User> users); //根据faceId获取一个本地用户信息 void getUserByFaceId(User user); //查询用户管理状态 void getStatus(UserStatus status); }
[2]users是查询到的本地所有用户的信息集合,User实体属性如下:
java public class User { private Long id; //用户id private String uuid; //用户UUID private String faceId; //用户的faceId,用于识别使用 private String name; //用户姓名 private String title; //称谓 private int gender; //用户性别 0:女 1:男 2:保密 private List<Face> faces; //人脸信息 [一个人可有多张头像,每张头像对应的信息] private String registerFacePath; //用于注册用户的图片路径 }
Face属性如下:
java public class Face { private Long id; //id private String faceId; //对应User的faceId private String path; //图片地址 }注:path 图片地址是一个图片加密后的文件,需要解密后才能使用,解密方式请查看下方
文件解密方法
根据faceId查询单个用户信息:
java userManager.getUserByFaceId/*[1]*/(mFaceId ,new UserListenrAbstract(){ @Override public void getUserByFaceId(User user/*[2]*/) { super.getUserByFaceId(user); Log.d("MainActivity","user:"+user); } });
[1]getUserByFaceId(String mFaceId,UserManagerListenr listenr)方法参数说明:
参数 类型 说明 mFaceId String 用户对应的faceId(每个用户都只对应一个faceId,faceId由录入用户时 视觉服务 生成,因此需要使用该接口时,因先调用 视觉服务 的人脸识别接口,拿到faceId) listenr UserManagerListenr 回调监听,参考 获取本地所有的用户信息 说明
[2]根据条件查询到的一个本地用户信息,User实体属性请参考:获取本地所有的用户信息 实体说明
获取用户管理状态
当需要查询用户管理是在线状态还是离线状态时使用,如果是在线用户管理,那么会返回相应的企业号对应的GroupId,GroupId 可以提供给 视觉服务 等需要GroupId的服务使用,GroupId 是用来区分不同企业号下的人员信息,一个GroupId下不允许重复人员,不同GroupId 互不影响
java userManager.getStatus(new UserListenrAbstract(){ @Override public void getStatus(UserStatus status/*[1]*/) { } });
[1]status是查询到用户管理的状态(在线/离线),以及在线时对应的groupId,具体UserStatus实体属性如下:
java public class UserStatus{ private Boolean open;//是否是开启在线用户管理 true:开启在线用户状态 false:未开启在线用户状态 private String groupId; //如果是开启在线用户管理,那么会返回相应的groupId; 否则该字段为null }
文件解密
java InputStream inputStream /*[1]*/=userManager.decryptInputStream(String encryptFilePath/*[2]*/);
[1][inputStream]是加密文件解密后的输入流,可以拿该流生成相应的文件,如果是加密图片路径,那么该流可以直接转Bitmap加载图片:
java InputStream decryptInputStream=userManager.decryptInputStream(encryptFilePath); Bitmap bitmap = BitmapFactory.decodeStream(decryptInputStream); ImageView imageView = findViewById(R.id.img); imageView.setImageBitmap(bitmap);
[2]encryptFilePath是加密文件地址,例如上述Face 实体中的path属性
用户注册
当用户通过该接口注册用户时,为了维持数据一致性,用户数据状态流向是跟随用户管理的状态保持一致,当用户管理开启的是在线用户管理时,通过该接口注册的用户都是在线用户,反之录入的是离线用户,查询是是否在线可通过上述 获取用户管理状态 接口查询状态
java userManager.registerUser(user /*[1]*/,UserListenrAbstract(){ @Override public void register(int code /*[2]*/, String msg/*[3]*/) { } });
[1]user与上述User内容一致,构造方式如下:
java User user = new User.UserBuilder("Cruzr" /*姓名*/, "/storage/emulated/0/Pictures/test2.png" /*图片地址*/) //姓名、图片地址是必填项 .gender(0) .title("title") .build();
[2]code:
java SUCCESS = 0; //入库成功 或 查询到该用户信息 FAILED_CODE = -1; //视觉服务断开连接 INSERT_FAILED_CODE = -2; //数据库入库失败 INSERT_VISUAL_FAILED_CODE = -3; //视觉服务特征值入库失败 INTERRUPT_FAILED_CODE = -4; //被下一个请求打断
[3]msg:当code不等于0时,msg表示错误信息,当code=0时,msg为success 或 用户信息的json数据注:更多视觉相关code可查看视觉服务里相应的code