您的位置:首页 > 移动开发 > Android开发

android开发中wifi模块移植

2015-11-30 10:57 579 查看
最近刚上一个项目,是关于在机智平台上使用esp8266芯片进行wifi通信控制,其实我对esp8266这块不是很熟悉,因为以前做的事zigbee的,现在使用wifi对智能灯进行控制。我在移植中碰到的问题做一简单总结。首先,将esp8266的wifi模块demo全部文件(espressif文件夹所有)的复制到机智云的app中,根据demo的Activity的实现在AirlinkActivity.java中写一个异步任务的内部类,重写doInBackground方法
@Override
protected Void doInBackground(String... params) {

String strSsid = params[0];
String strBssid = params[1];
String strPassword = params[2];
String isSsidHiddenStr = params[3];
boolean isSsidHidden = false;
if(isSsidHiddenStr.equals("YES"))
{
isSsidHidden = true;
}

Log.i(TAG, "strSsid = :" + strSsid + ", strBssid = :" + strBssid
+ ", strPassword = :" + strPassword + ", isSsidHiddenStr = :" + isSsidHiddenStr);

new EsptouchTask(strSsid, strBssid, strPassword, isSsidHidden, AirlinkActivity.this).executeForResult();
return null;
}
new EsptouchTask(strSsid, strBssid, strPassword, isSsidHidden, AirlinkActivity.this).executeForResult();一定调用executeForResult()方法。
完整demo_Activity
package com.espressif.iot.esptouch.demo_activity;import com.demo.smarthome.R;import com.espressif.iot.esptouch.EsptouchTask;import com.espressif.iot.esptouch.IEsptouchResult;import com.espressif.iot.esptouch.IEsptouchTask;import com.espressif.iot.esptouch.task.__IEsptouchTask;import android.app.Activity;import android.app.ProgressDialog;import android.content.DialogInterface;import android.content.DialogInterface.OnCancelListener;import android.os.AsyncTask;import android.os.Bundle;import android.text.TextUtils;import android.util.Log;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.Switch;import android.widget.TextView;public class EsptouchDemoActivity extends Activity implements OnClickListener {private static final String TAG = "EsptouchDemoActivity";private TextView mTvApSsid;private EditText mEdtApPassword;private Button mBtnConfirm;private Switch mSwitchIsSsidHidden;private EspWifiAdminSimple mWifiAdmin;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.esptouch_demo_activity);TextView title	= (TextView) findViewById(R.id.titleSmartlink);title.setClickable(true);title.setOnClickListener(new OnClickListener(){@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubfinish();}});mWifiAdmin = new EspWifiAdminSimple(this);mTvApSsid = (TextView) findViewById(R.id.tvApSssidConnected);mEdtApPassword = (EditText) findViewById(R.id.edtApPassword);mBtnConfirm = (Button) findViewById(R.id.btnConfirm);mSwitchIsSsidHidden = (Switch) findViewById(R.id.switchIsSsidHidden);mBtnConfirm.setOnClickListener(this);}@Overrideprotected void onResume() {super.onResume();// display the connected ap's ssidString apSsid = mWifiAdmin.getWifiConnectedSsid();if (apSsid != null) {mTvApSsid.setText(apSsid);} else {mTvApSsid.setText("");}// check whether the wifi is connectedboolean isApSsidEmpty = TextUtils.isEmpty(apSsid);mBtnConfirm.setEnabled(!isApSsidEmpty);}@Overridepublic void onClick(View v) {if (v == mBtnConfirm) {String apSsid = mTvApSsid.getText().toString();String apPassword = mEdtApPassword.getText().toString();String apBssid = mWifiAdmin.getWifiConnectedBssid();Boolean isSsidHidden = mSwitchIsSsidHidden.isChecked();String isSsidHiddenStr = "NO";if (isSsidHidden) {isSsidHiddenStr = "YES";}if (__IEsptouchTask.DEBUG) {Log.d(TAG, "mBtnConfirm is clicked, mEdtApSsid = " + apSsid+ ", " + " mEdtApPassword = " + apPassword);}new EsptouchAsyncTask2().execute(apSsid, apBssid, apPassword, isSsidHiddenStr);}}private class EsptouchAsyncTask2 extends AsyncTask<String, Void, IEsptouchResult> {private ProgressDialog mProgressDialog;private IEsptouchTask mEsptouchTask;@Overrideprotected void onPreExecute() {mProgressDialog = new ProgressDialog(EsptouchDemoActivity.this);mProgressDialog.setMessage("Esptouch is configuring, please wait for a moment...");mProgressDialog.setCanceledOnTouchOutside(false);mProgressDialog.setOnCancelListener(new OnCancelListener() {@Overridepublic void onCancel(DialogInterface dialog) {if (__IEsptouchTask.DEBUG) {Log.i(TAG, "progress dialog is canceled");}if (mEsptouchTask != null) {mEsptouchTask.interrupt();}}});mProgressDialog.setButton(DialogInterface.BUTTON_POSITIVE,"Waiting...", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {}});mProgressDialog.show();mProgressDialog.getButton(DialogInterface.BUTTON_POSITIVE).setEnabled(false);}@Overrideprotected IEsptouchResult doInBackground(String... params) {String apSsid = params[0];String apBssid = params[1];String apPassword = params[2];String isSsidHiddenStr = params[3];boolean isSsidHidden = false;if(isSsidHiddenStr.equals("YES")){isSsidHidden = true;}mEsptouchTask = new EsptouchTask(apSsid, apBssid, apPassword, isSsidHidden, EsptouchDemoActivity.this);IEsptouchResult result = mEsptouchTask.executeForResult();return result;}@Overrideprotected void onPostExecute(IEsptouchResult result) {mProgressDialog.getButton(DialogInterface.BUTTON_POSITIVE).setEnabled(true);mProgressDialog.getButton(DialogInterface.BUTTON_POSITIVE).setText("Confirm");// it is unnecessary at the moment, add here just to show how to use isCancelled()if (!result.isCancelled()) {if (result.isSuc()) {mProgressDialog.setMessage("Esptouch success, bssid = "+ result.getBssid() + ",InetAddress = "+ result.getInetAddress().getHostAddress());} else {mProgressDialog.setMessage("Esptouch fail");}}}}}
移植的部分代码:
/*** start smartlink wifi*/private void startSmartlink(){secondleft = 60;String strBssid = mWifiAdmin.getWifiConnectedBssid();Log.i(TAG, "strBssid :" + strBssid);boolean isSsidHidden = false;if(isSsidHiddenStr.equals("YES")){isSsidHidden = true;}Log.i(TAG, "mBtnConfirm is clicked, strBssid = " + strBssid + "strSsid = " + strSSid+ ", " + " strPassword = " + strPsw);tvTick.setText(secondleft + "");showLayout(UI_STATE.Setting);timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {Log.i(TAG, " connect ");handler.sendEmptyMessage(handler_key.TICK_TIME.ordinal());}}, 1000, 1000);new EsptouchAsyncTask().execute(strSSid, strBssid, strPsw, isSsidHiddenStr);}/*** 内部类:异步处理wifi信息*/private class EsptouchAsyncTask extends AsyncTask<String, Void, Void> {@Overrideprotected void onPreExecute() {super.onPreExecute();}@Override
protected Void doInBackground(String... params) {

String strSsid = params[0];
String strBssid = params[1];
String strPassword = params[2];
String isSsidHiddenStr = params[3];
boolean isSsidHidden = false;
if(isSsidHiddenStr.equals("YES"))
{
isSsidHidden = true;
}

Log.i(TAG, "strSsid = :" + strSsid + ", strBssid = :" + strBssid
+ ", strPassword = :" + strPassword + ", isSsidHiddenStr = :" + isSsidHiddenStr);

new EsptouchTask(strSsid, strBssid, strPassword, isSsidHidden, AirlinkActivity.this).executeForResult();
return null;
}@Overrideprotected void onProgressUpdate(Void... values) {super.onProgressUpdate(values);}}
具体的实现要看需要什么条件,可能开发的功能不一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android