无线配对中接口和异步任务的完全解析

这篇博客深入解析了ESP8266App无线配置硬件连接网络的过程,重点关注异步任务和接口的使用。文章详细分析了UDP通信的建立、监听端口设置、EsptouchTask的执行流程,以及如何通过IEsptouchResult接口获取设备的BSSID和IP地址。同时,介绍了关键方法如监听方法__listenAsyn()的执行过程。
摘要由CSDN通过智能技术生成

执行一任务中Activity的解析

ESP8266App无线配置硬件连接网络的的解析.

源码连接地址,
请查看readme文件.

告诉自己每天认真的学习,充电!过好每一天.

我们执行异步任务的类是: EsptouchDemoActivity

new EsptouchAsyncTask3().execute(apSsid, apBssid, apPassword,
isSsidHiddenStr, taskResultCountStr); // 参数  apssid apbssid appassword no 1;

开始分析这个异步任务

参数说明,是哪个参数分别是在doInBackground中使用到的, 和设置进度条使用到的, 最后是在onPostExecuter中使用到的,是一个集合;

我们看看这个接口 : IEsptouchResult 里面有四个方法:第一个方法是 是否继续进行下一步 第二个方法是检查这个任务是不是用户自己关闭的; 第三个方法是: 获取设备的bssid 第四个方法是获取设备的 ip地址.

private class EsptouchAsyncTask3 extends AsyncTask<String, Void, List<IEsptouchResult>> {

    private ProgressDialog mProgressDialog;

    private IEsptouchTask mEsptouchTask;

    private final Object mLock = new Object();

    @Override  
    protected void onPreExecute() {  //  准备工作
    异步任务的第一个方法,其实就是展示对话框,直接不看,有一点就是有队task的是不是空的判断,非空直接打断
    }



    @Override  // 异步任务的最后返回的结果    没什么可看的,最重要的在上面

    protected void onPostExecute(List<IEsptouchResult> result) {

        IEsptouchResult firstResult = result.get(0);
        Log.d(TAG, "onPostExecute: ");

        if (!firstResult.isCancelled()) {// isCancelled 表示是不是客户关闭的  这里不是客户关闭的
//              int count = 0; 
//              final int maxDisplayCount = 5; 
            if (firstResult.isSuc()) {
                   try {  
                        if(str_ssid_FLAG.equals(str_ssid)){ // 
                            if(!str_pass_FLAG.equals(str_pass)){  // dubug不走
                                if(str_ssid.length()>0 && str_pass.length()>0 && index!=-1){
                                    ssid_list.set(index, str_ssid);
                                    pass_list.set(index, str_pass);
                                    writeSSID(FAVOSSIDPATH);
                                    writePASS(FAVOPASSPATH);
                                }
                            }
                        }else{
                            if(str_ssid.length()>0 && str_pass.length()>0){
                                ssid_list.add(str_ssid);
                                pass_list.add(str_pass);
                                writeSSID(FAVOSSIDPATH);
                                writePASS(FAVOPASSPATH);
                            }
                        }
                    } catch (Exception e) {  
                        // TODO Auto-generated catch block  
                        e.printStackTrace();  
                    } 
                  new AlertDialog.Builder(EsptouchDemoActivity.this)
                  .setIcon(android.R.drawable.ic_dialog_info)
                  .setTitle("提示")
                  .setMessage("配置成功!") 
                  .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                      public void onClick(DialogInterface dialog, int whichButton) {

                            dialog.dismiss();    
                            finish();
                      }
                  }).show();  
            } else { 

                 str_ssid = null;
                 str_pass = null;

                  new AlertDialog.Builder(EsptouchDemoActivity.this)
                  .setIcon(android.R.drawable.ic_dialog_info)
                  .setTitle("提示")
                  .setMessage("配置失败,请重试!") 
                  .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                      public void onClick(DialogInterface dialog, int whichButton) {
                            dialog.dismiss();     
                      }
                  }).show();
            }
        }
    }
}

上面的是准备的方法和最后的返回的方法; 我们单独将 doInBackground 分出来设置一下子

@Override // 关键方法
    protected List<IEsptouchResult> doInBackground(String... params) {

        int taskResultCount = -1;  //  初始化默认的值  最后赋值为1
        synchronized (mLock) { 

            // 获取传递过来的参数
            String apSsid = params[0]; //  ssid
            String apBssid = params[1]; //  bssid
            String apPassword = params[2]; // 密码
            String isSsidHiddenStr = params[3]; //  no
            String taskResultCountStr = params[4]; // 1
            boolean isSsidHidden = false;

            if (isSsidHiddenStr.equals("YES")) {  //  不会执行
                isSsidHidden = true;
            }
            taskResultCount = Integer.parseInt(taskResultCountStr); //1  实质就是讲转化的string 转化为int  结果就是我们选择的1

            mEsptouchTask = new EsptouchTask(apSsid, apBssid, apPassword,  //传递参数
                    isSsidHidden, EsptouchDemoActivity.this);

            mEsptouchTask.setEsptouchListener(myListener); //  这是参数类型  IEsptouchListener 这个接口里面只有一个方法就是添加 IEsptouchResult的方法;
        }


        List<IEsptouchResult> resultList = mEsptouchTask.executeForResults(taskResultCount);   //



        return resultList;
    }

我们看到首先是将参数传递到EsptouchTask中:

public EsptouchTask(String apSsid, String apBssid, String apPassword,
        boolean isSsidHidden, Context context) {

    _mParameter = new EsptouchTaskParameter();
    _mEsptouchTask = new __EsptouchTask(apSsid, apBssid, apPassword,
            context, _mParameter, isSsidHidden);
}

EsptouchTaskParameter我们看过,里面定义了很多的常量和方法,不细看了
再一次将参数传递过去__EsptouchTask:

public __EsptouchTask(String apSsid, String apBss
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值