public class FacesSet {
private static FacesSet instance = null;
private Set<String> faceNames = new HashSet<String>();
private FacesSet(){}
public static FacesSet createInstance(){
synchronized (FacesSet.class.getClass()){
if(instance == null){
instance = new FacesSet();
}
return instance;
}
}
public static FacesSet getInstance() {
return instance;
}
public static void setInstance(FacesSet instance) {
FacesSet.instance = instance;
}
public Set<String> getFaceNames() {
return faceNames;
}
public void setFaceNames(Set<String> faceNames) {
this.faceNames = faceNames;
}
}
首先新建一個存取面部信息類的單例模式
//TODO: 視頻流讀取到會員信息時發生交互,如打招呼
if (msg_id.equals("FACE_DETECT_FACE_LIST_NTF")){
FacesSet mySet = FacesSet.createInstance();
JSONArray arr = jsonObject.getJSONArray("face_list");
JSONObject face_list = (JSONObject) arr.get(0);
JSONObject face_recg = face_list.getJSONObject("face_recg");
String face_name = face_recg.getString("name");
if (!face_name.equals(mySet.getFaceNames().toString())){
flag = true;
}
if(flag){
tts.startSpeaking("很高興見到你啊," + face_name + "請問需要什麼幫助呢?", new OnSpeakListener() {
@Override
public void onSpeakBegin() {
Log.d("startSpeaking", "startSpeaking");
}
@Override
public void onCompleted() {
Log.d("startSpeaking", "onCompleted");
}
});
Set<String> faceNames = new HashSet<>();
faceNames.add(face_name);
mySet.setFaceNames(faceNames);
flag = false;
}
定義一個全局變量flag=true,每運行此代碼塊會優先判斷傳入face_name是否與之前傳入並置入哈希表中的數據相等,若相等,則彈出,若不相等,則重置flag爲true,再次執行本代碼塊。
可以忽略重複讀入相同數據的影響。