前段時間公司有一個基於高通410c開發板的智能管家項目,該項目的功能點如下:遠程控制,煙霧檢測, 開關控制。下面我將爲大家一一講解這些功能的實現。
遠程控制主要是集成第三方的服務-Wilddog.WildDog採用用RXjava的訂閱者/分發者的思想邏輯。
主要實現邏輯如下:
`
public static SyncReference getSyncref(String child){
SyncReference ref = WilddogSync.getInstance().getReference().child(child);
return ref;
}
public static void setvalue(SyncReference ref, String key, String value) {
if (ref!=null){
Command command = new Command(key, value);
ref.setValue(command);
}
}
public static String datalisterner( SyncReference ref,String key, String value) {
final String[] result = {null};
if (ref!=null){
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
result[0] =dataSnapshot.toString();
}
@Override
public void onCancelled(SyncError syncError) {
}
});
}
return result[0];
}`
煙霧檢測邏輯:主要是接受板子端回傳的數據。
private void initListerner() {
reference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String key = dataSnapshot.child("finction").getValue().toString();
if (key.equals("value")) {
String code = dataSnapshot.child("code").getValue().toString();
Log.i("index-of",code+"");
String tem[] = code.split("XX");
Message message = new Message();
Bundle bundle = new Bundle();
Log.i("danpness",tem[0]);
bundle.putString("tem", tem[0]);
bundle.putString("bool", tem[1]);
message.setData(bundle);
handler.sendMessage(message);
}
}
@Override
public void onCancelled(SyncError syncError) {
}
});
}
開關控制主要邏輯:
private void initview() {
seekBar = view.findViewById(R.id.progress);
button = view.findViewById(R.id.open_bull);
status_text = view.findViewById(R.id.value_status);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (status) {
WildDogUtil.setvalue(reference, "open", "10"); button.setBackground(getResources().getDrawable(R.drawable.shape_button_not));
seekBar.setVisibility(View.VISIBLE);
status = false;
closeProgress();
} else {
WildDogUtil.setvalue(reference, "close", "10");
seekBar.setVisibility(View.VISIBLE); button.setBackground(getResources().getDrawable(R.drawable.shape_button_open));
status = true;
closeProgress();
}
}
});
}
private void closeProgress() {
handler.postDelayed(new Runnable() {
@Override
public void run() {
seekBar.setVisibility(View.INVISIBLE);
}
}, 3000);
}
這樣我們就可以實時地瞭解家裏的情況了!!!!