前段时间公司有一个基于高通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);
}
这样我们就可以实时地了解家里的情况了!!!!