zoukankan      html  css  js  c++  java
  • 安卓初次完美调试,并成功编程!

    语言都是相通的,爽歪歪2017-12-0317:33:58

    这是GosDeviceControlActivity.java的代码

      1 package com.gizwits.opensource.appkit.ControlModule;
      2 
      3 import android.app.AlertDialog;
      4 import android.app.Dialog;
      5 import android.content.DialogInterface;
      6 import android.content.DialogInterface.OnDismissListener;
      7 import android.content.Intent;
      8 import android.os.Bundle;
      9 import android.os.Handler;
     10 import android.os.Message;
     11 import android.text.TextUtils;
     12 import android.util.Log;
     13 import android.view.KeyEvent;
     14 import android.view.Menu;
     15 import android.view.MenuItem;
     16 import android.view.View;
     17 import android.view.Window;
     18 import android.view.View.OnClickListener;
     19 import android.widget.AdapterView;
     20 import android.widget.AdapterView.OnItemSelectedListener;
     21 import android.widget.EditText;
     22 import android.widget.Button;
     23 import android.widget.LinearLayout;
     24 import android.widget.SeekBar;
     25 import android.widget.SeekBar.OnSeekBarChangeListener;
     26 import android.widget.Spinner;
     27 import android.widget.Switch;
     28 import android.widget.TextView;
     29 import android.widget.TextView.OnEditorActionListener;
     30 import android.widget.Toast;
     31 
     32 import java.util.concurrent.ConcurrentHashMap;
     33 
     34 import com.gizwits.gizwifisdk.api.GizWifiDevice;
     35 import com.gizwits.gizwifisdk.enumration.GizWifiDeviceNetStatus;
     36 import com.gizwits.gizwifisdk.enumration.GizWifiErrorCode;
     37 import com.gizwits.opensource.appkit.R;
     38 import com.gizwits.opensource.appkit.utils.HexStrUtils;
     39 import com.gizwits.opensource.appkit.view.HexWatcher;
     40 
     41 public class GosDeviceControlActivity extends GosControlModuleBaseActivity
     42         implements OnClickListener, OnEditorActionListener, OnSeekBarChangeListener {
     43 
     44     /** 设备列表传入的设备变量 */
     45     private GizWifiDevice mDevice;
     46     private Switch sw_bool_open;
     47     private Switch sw_bool_test;
     48     private Button btn_led;
     49     private enum handler_key {
     50         /** 更新界面 */
     51         UPDATE_UI,
     52 
     53         DISCONNECT,
     54     }
     55 
     56     private Runnable mRunnable = new Runnable() {
     57         public void run() {
     58             if (isDeviceCanBeControlled()) {
     59                 progressDialog.cancel();
     60             } else {
     61                 toastDeviceNoReadyAndExit();
     62             }
     63         }
     64 
     65     };
     66 
     67     /** The handler. */
     68     Handler mHandler = new Handler() {
     69         public void handleMessage(Message msg) {
     70             super.handleMessage(msg);
     71             handler_key key = handler_key.values()[msg.what];
     72             switch (key) {
     73             case UPDATE_UI:
     74                 updateUI();
     75                 break;
     76             case DISCONNECT:
     77                 toastDeviceDisconnectAndExit();
     78                 break;
     79             }
     80         }
     81     };
     82 
     83     @Override
     84     protected void onCreate(Bundle savedInstanceState) {
     85         super.onCreate(savedInstanceState);
     86         setContentView(R.layout.activity_gos_device_control);
     87         initDevice();
     88         setActionBar(true, true, getDeviceName());
     89         initView();
     90         initEvent();
     91     }
     92                           /**
     93                           * 初始化控件
     94                            */
     95     
     96     private void initView() {
     97         
     98         sw_bool_open = (Switch) findViewById(R.id.sw_bool_open);
     99         sw_bool_test = (Switch) findViewById(R.id.sw_bool_test);
    100           btn_led  = (Button) findViewById(R.id.btn_led);  
    101     }
    102 
    103     private void initEvent() {
    104 
    105         sw_bool_open.setOnClickListener(this);
    106         sw_bool_test.setOnClickListener(this);
    107         btn_led.setOnClickListener(this);
    108     
    109     }
    110      /**
    111      * 初始化设备
    112       */
    113     private void initDevice() {
    114         Intent intent = getIntent();
    115         mDevice = (GizWifiDevice) intent.getParcelableExtra("GizWifiDevice");
    116         mDevice.setListener(gizWifiDeviceListener);
    117         Log.i("Apptest", mDevice.getDid());
    118     }
    119 
    120     private String getDeviceName() {
    121         if (TextUtils.isEmpty(mDevice.getAlias())) {
    122             return mDevice.getProductName();
    123         }
    124         return mDevice.getAlias();
    125     }
    126 
    127     @Override
    128     protected void onResume() {
    129         super.onResume();
    130         getStatusOfDevice();
    131     }
    132 
    133     @Override
    134     protected void onDestroy() {
    135         super.onDestroy();
    136         mHandler.removeCallbacks(mRunnable);
    137         // 退出页面,取消设备订阅
    138         mDevice.setSubscribe(false);
    139         mDevice.setListener(null);
    140     }
    141 
    142     @Override
    143     public void onClick(View v) {
    144         switch (v.getId()) {
    145         case R.id.sw_bool_open:
    146             sendCommand(KEY_OPEN, sw_bool_open.isChecked());
    147             break;
    148         case R.id.sw_bool_test:
    149             sendCommand(KEY_TEST, sw_bool_test.isChecked());
    150              /**
    151              * 初始化设备
    152              * 激动人心的时刻,我利用纯属的想象,猜测sw_bool_test.isChecked()必定会返回ture 或者false,就
    153              * 利用判断及挖掘了动画效果
    154              * 2017年12月3日
    155               */
    156             if(sw_bool_test.isChecked()) {
    157                 btn_led.setSelected(true);    
    158                 }
    159                 else 
    160                 btn_led.setSelected(false);    
    161             break;
    162         default:
    163             break;    
    164     
    165                             
    166         }
    167         
    168         
    169         
    170         
    171     }
    172 
    173     /*
    174      * ========================================================================
    175      * EditText 点击键盘“完成”按钮方法
    176      * ========================================================================
    177      */
    178     @Override
    179     public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
    180 
    181         switch (v.getId()) {
    182         default:
    183             break;
    184         }
    185         hideKeyBoard();
    186         return false;
    187 
    188     }
    189     
    190     /*
    191      * ========================================================================
    192      * seekbar 回调方法重写
    193      * ========================================================================
    194      */
    195     @Override
    196     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    197         
    198         switch (seekBar.getId()) {
    199         default:
    200             break;
    201         }
    202     }
    203 
    204     @Override
    205     public void onStartTrackingTouch(SeekBar seekBar) {
    206 
    207     }
    208 
    209     @Override
    210     public void onStopTrackingTouch(SeekBar seekBar) {
    211         switch (seekBar.getId()) {
    212         default:
    213             break;
    214         }
    215     }
    216 
    217     /*
    218      * ========================================================================
    219      * 菜单栏
    220      * ========================================================================
    221      */
    222     @Override
    223     public boolean onCreateOptionsMenu(Menu menu) {
    224         getMenuInflater().inflate(R.menu.device_more, menu);
    225         return super.onCreateOptionsMenu(menu);
    226     }
    227 
    228     @Override
    229     public boolean onOptionsItemSelected(MenuItem item) {
    230         switch (item.getItemId()) {
    231 
    232         case R.id.action_setDeviceInfo:
    233             setDeviceInfo();
    234             break;
    235 
    236         case R.id.action_getHardwareInfo:
    237             if (mDevice.isLAN()) {
    238                 mDevice.getHardwareInfo();
    239             } else {
    240                 myToast("只允许在局域网下获取设备硬件信息!");
    241             }
    242             break;
    243 
    244         case R.id.action_getStatu:
    245             mDevice.getDeviceStatus();
    246             break;
    247 
    248         default:
    249             break;
    250         }
    251 
    252         return super.onOptionsItemSelected(item);
    253     }
    254 
    255     /**
    256      * Description:根据保存的的数据点的值来更新UI
    257      */
    258     protected void updateUI() {
    259         
    260         sw_bool_open.setChecked(data_open);
    261         sw_bool_test.setChecked(data_test);
    262     
    263     }
    264 
    265     private void setEditText(EditText et, Object value) {
    266         et.setText(value.toString());
    267         et.setSelection(value.toString().length());
    268         et.clearFocus();
    269     }
    270 
    271     /**
    272      * Description:页面加载后弹出等待框,等待设备可被控制状态回调,如果一直不可被控,等待一段时间后自动退出界面
    273      */
    274     private void getStatusOfDevice() {
    275         // 设备是否可控
    276         if (isDeviceCanBeControlled()) {
    277             // 可控则查询当前设备状态
    278             mDevice.getDeviceStatus();
    279         } else {
    280             // 显示等待栏
    281             progressDialog.show();
    282             if (mDevice.isLAN()) {
    283                 // 小循环10s未连接上设备自动退出
    284                 mHandler.postDelayed(mRunnable, 10000);
    285             } else {
    286                 // 大循环20s未连接上设备自动退出
    287                 mHandler.postDelayed(mRunnable, 20000);
    288             }
    289         }
    290     }
    291 
    292     /**
    293      * 发送指令,下发单个数据点的命令可以用这个方法
    294      * 
    295      * <h3>注意</h3>
    296      * <p>
    297      * 下发多个数据点命令不能用这个方法多次调用,一次性多次调用这个方法会导致模组无法正确接收消息,参考方法内注释。
    298      * </p>
    299      * 
    300      * @param key
    301      *            数据点对应的标识名
    302      * @param value
    303      *            需要改变的值
    304      */
    305     private void sendCommand(String key, Object value) {
    306         if (value == null) {
    307             return;
    308         }
    309         int sn = 5;
    310         ConcurrentHashMap<String, Object> hashMap = new ConcurrentHashMap<String, Object>();
    311         hashMap.put(key, value);
    312         // 同时下发多个数据点需要一次性在map中放置全部需要控制的key,value值
    313         // hashMap.put(key2, value2);
    314         // hashMap.put(key3, value3);
    315         mDevice.write(hashMap, sn);
    316         Log.i("liang", "下发命令:" + hashMap.toString());
    317     }
    318 
    319     private boolean isDeviceCanBeControlled() {
    320         return mDevice.getNetStatus() == GizWifiDeviceNetStatus.GizDeviceControlled;
    321     }
    322 
    323     private void toastDeviceNoReadyAndExit() {
    324         Toast.makeText(this, "设备无响应,请检查设备是否正常工作", Toast.LENGTH_SHORT).show();
    325         finish();
    326     }
    327 
    328     private void toastDeviceDisconnectAndExit() {
    329         Toast.makeText(GosDeviceControlActivity.this, "连接已断开", Toast.LENGTH_SHORT).show();
    330         finish();
    331     }
    332 
    333     /**
    334      * 展示设备硬件信息
    335      * 
    336      * @param hardwareInfo
    337      */
    338     private void showHardwareInfo(String hardwareInfo) {
    339         String hardwareInfoTitle = "设备硬件信息";
    340         new AlertDialog.Builder(this).setTitle(hardwareInfoTitle).setMessage(hardwareInfo)
    341                 .setPositiveButton(R.string.besure, null).show();
    342     }
    343 
    344     /**
    345      * Description:设置设备别名与备注
    346      */
    347     private void setDeviceInfo() {
    348 
    349         final Dialog mDialog = new AlertDialog.Builder(this).setView(new EditText(this)).create();
    350         mDialog.show();
    351 
    352         Window window = mDialog.getWindow();
    353         window.setContentView(R.layout.alert_gos_set_device_info);
    354 
    355         final EditText etAlias;
    356         final EditText etRemark;
    357         etAlias = (EditText) window.findViewById(R.id.etAlias);
    358         etRemark = (EditText) window.findViewById(R.id.etRemark);
    359 
    360         LinearLayout llNo, llSure;
    361         llNo = (LinearLayout) window.findViewById(R.id.llNo);
    362         llSure = (LinearLayout) window.findViewById(R.id.llSure);
    363 
    364         if (!TextUtils.isEmpty(mDevice.getAlias())) {
    365             setEditText(etAlias, mDevice.getAlias());
    366         }
    367         if (!TextUtils.isEmpty(mDevice.getRemark())) {
    368             setEditText(etRemark, mDevice.getRemark());
    369         }
    370 
    371         llNo.setOnClickListener(new OnClickListener() {
    372 
    373             @Override
    374             public void onClick(View v) {
    375                 mDialog.dismiss();
    376             }
    377         });
    378 
    379         llSure.setOnClickListener(new OnClickListener() {
    380 
    381             @Override
    382             public void onClick(View v) {
    383                 if (TextUtils.isEmpty(etRemark.getText().toString())
    384                         && TextUtils.isEmpty(etAlias.getText().toString())) {
    385                     myToast("请输入设备别名或备注!");
    386                     return;
    387                 }
    388                 mDevice.setCustomInfo(etRemark.getText().toString(), etAlias.getText().toString());
    389                 mDialog.dismiss();
    390                 String loadingText = (String) getText(R.string.loadingtext);
    391                 progressDialog.setMessage(loadingText);
    392                 progressDialog.show();
    393             }
    394         });
    395 
    396         mDialog.setOnDismissListener(new OnDismissListener() {
    397             @Override
    398             public void onDismiss(DialogInterface dialog) {
    399                 hideKeyBoard();
    400             }
    401         });
    402     }
    403     
    404     /*
    405      * 获取设备硬件信息回调
    406      */
    407     @Override
    408     protected void didGetHardwareInfo(GizWifiErrorCode result, GizWifiDevice device,
    409             ConcurrentHashMap<String, String> hardwareInfo) {
    410         super.didGetHardwareInfo(result, device, hardwareInfo);
    411         StringBuffer sb = new StringBuffer();
    412         if (GizWifiErrorCode.GIZ_SDK_SUCCESS != result) {
    413             myToast("获取设备硬件信息失败:" + result.name());
    414         } else {
    415             sb.append("Wifi Hardware Version:" + hardwareInfo.get(WIFI_HARDVER_KEY) + "
    ");
    416             sb.append("Wifi Software Version:" + hardwareInfo.get(WIFI_SOFTVER_KEY) + "
    ");
    417             sb.append("MCU Hardware Version:" + hardwareInfo.get(MCU_HARDVER_KEY) + "
    ");
    418             sb.append("MCU Software Version:" + hardwareInfo.get(MCU_SOFTVER_KEY) + "
    ");
    419             sb.append("Wifi Firmware Id:" + hardwareInfo.get(WIFI_FIRMWAREID_KEY) + "
    ");
    420             sb.append("Wifi Firmware Version:" + hardwareInfo.get(WIFI_FIRMWAREVER_KEY) + "
    ");
    421             sb.append("Product Key:" + "
    " + hardwareInfo.get(PRODUCT_KEY) + "
    ");
    422 
    423             // 设备属性
    424             sb.append("Device ID:" + "
    " + mDevice.getDid() + "
    ");
    425             sb.append("Device IP:" + mDevice.getIPAddress() + "
    ");
    426             sb.append("Device MAC:" + mDevice.getMacAddress() + "
    ");
    427         }
    428         showHardwareInfo(sb.toString());
    429     }
    430 
    431     /*
    432      * 设置设备别名和备注回调
    433      */
    434     @Override
    435     protected void didSetCustomInfo(GizWifiErrorCode result, GizWifiDevice device) {
    436         super.didSetCustomInfo(result, device);
    437         if (GizWifiErrorCode.GIZ_SDK_SUCCESS == result) {
    438             myToast("设置成功");
    439             progressDialog.cancel();
    440             finish();
    441         } else {
    442             myToast("设置失败:" + result.name());
    443         }
    444     }
    445 
    446     /*
    447      * 设备状态改变回调,只有设备状态为可控才可以下发控制命令
    448      */
    449     @Override
    450     protected void didUpdateNetStatus(GizWifiDevice device, GizWifiDeviceNetStatus netStatus) {
    451         super.didUpdateNetStatus(device, netStatus);
    452         if (netStatus == GizWifiDeviceNetStatus.GizDeviceControlled) {
    453             mHandler.removeCallbacks(mRunnable);
    454             progressDialog.cancel();
    455         } else {
    456             mHandler.sendEmptyMessage(handler_key.DISCONNECT.ordinal());
    457         }
    458     }
    459     
    460     /*
    461      * 设备上报数据回调,此回调包括设备主动上报数据、下发控制命令成功后设备返回ACK
    462      */
    463     @Override
    464     protected void didReceiveData(GizWifiErrorCode result, GizWifiDevice device,
    465             ConcurrentHashMap<String, Object> dataMap, int sn) {
    466         super.didReceiveData(result, device, dataMap, sn);
    467         Log.i("liang", "接收到数据");
    468         if (result == GizWifiErrorCode.GIZ_SDK_SUCCESS && dataMap.get("data") != null) {
    469             getDataFromReceiveDataMap(dataMap);
    470             mHandler.sendEmptyMessage(handler_key.UPDATE_UI.ordinal());
    471         }
    472     }
    473 
    474 }
    @青山不移,文笔不息。学习,坚持,梦想青春!
  • 相关阅读:
    算法第四章上机实验报告
    算法第四章作业
    算法第三章上机实验报告
    算法第三章作业
    算法第二章上机实验报告
    算法第二章作业
    第五次c++作业总结
    第三次c++作业总结
    Linux上部署Java项目
    JVM类加载
  • 原文地址:https://www.cnblogs.com/pengwenzheng/p/7966591.html
Copyright © 2011-2022 走看看