增加设备入网代码,完善airkiss发送逻辑
This commit is contained in:
parent
14bd2910aa
commit
9ef9c1e10b
|
|
@ -2,10 +2,12 @@ package com.ifish.activity.newbind;
|
||||||
|
|
||||||
import android.app.ProgressDialog;
|
import android.app.ProgressDialog;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.os.AsyncTask;
|
||||||
import android.os.CountDownTimer;
|
import android.os.CountDownTimer;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
||||||
|
|
@ -26,12 +28,15 @@ import com.ifish.activity.MainThree1CControlActivity;
|
||||||
import com.ifish.activity.MainThreeControlActivity;
|
import com.ifish.activity.MainThreeControlActivity;
|
||||||
import com.ifish.activity.MainTwoControlActivity;
|
import com.ifish.activity.MainTwoControlActivity;
|
||||||
import com.ifish.activity.MainZeroControlActivity;
|
import com.ifish.activity.MainZeroControlActivity;
|
||||||
import com.ifish.activity.NewBindDeviceChoiceActivity;
|
|
||||||
import com.ifish.airkiss.AirKissEncoder;
|
import com.ifish.airkiss.AirKissEncoder;
|
||||||
import com.ifish.airkiss.Str_Hex;
|
import com.ifish.airkiss.UDPReceiver;
|
||||||
import com.ifish.basebean.BaseBean;
|
import com.ifish.basebean.BaseBean;
|
||||||
import com.ifish.basebean.Device;
|
import com.ifish.basebean.Device;
|
||||||
import com.ifish.baseclass.BaseGradeActivity;
|
import com.ifish.baseclass.BaseGradeActivity;
|
||||||
|
import com.ifish.esptouch.ByteUtil;
|
||||||
|
import com.ifish.esptouch.EsptouchTask;
|
||||||
|
import com.ifish.esptouch.IEsptouchResult;
|
||||||
|
import com.ifish.esptouch.IEsptouchTask;
|
||||||
import com.ifish.utils.AnimationUtil;
|
import com.ifish.utils.AnimationUtil;
|
||||||
import com.ifish.utils.Commons;
|
import com.ifish.utils.Commons;
|
||||||
import com.ifish.utils.HttpListener;
|
import com.ifish.utils.HttpListener;
|
||||||
|
|
@ -40,7 +45,6 @@ import com.ifish.utils.L;
|
||||||
import com.ifish.utils.SPUtil;
|
import com.ifish.utils.SPUtil;
|
||||||
import com.ifish.utils.ToastUtil;
|
import com.ifish.utils.ToastUtil;
|
||||||
import com.ifish.utils.WifiUtil;
|
import com.ifish.utils.WifiUtil;
|
||||||
import com.ifish.view.PetPopupChoice;
|
|
||||||
import com.lidroid.xutils.util.LogUtils;
|
import com.lidroid.xutils.util.LogUtils;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
@ -49,12 +53,11 @@ import java.net.DatagramSocket;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.SocketException;
|
import java.net.SocketException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import rx.Observable;
|
import rx.Observable;
|
||||||
import rx.Subscription;
|
|
||||||
import rx.Observer;
|
import rx.Observer;
|
||||||
import rx.Subscriber;
|
import rx.Subscriber;
|
||||||
|
import rx.Subscription;
|
||||||
import rx.android.schedulers.AndroidSchedulers;
|
import rx.android.schedulers.AndroidSchedulers;
|
||||||
import rx.schedulers.Schedulers;
|
import rx.schedulers.Schedulers;
|
||||||
|
|
||||||
|
|
@ -77,13 +80,26 @@ public class AirKissUtil {
|
||||||
private CountDownTimer deviceIsNullTimer;
|
private CountDownTimer deviceIsNullTimer;
|
||||||
private SPUtil sp;
|
private SPUtil sp;
|
||||||
private AppCompatActivity curActivity;
|
private AppCompatActivity curActivity;
|
||||||
public void init(AppCompatActivity activity){
|
private String bssid = "";
|
||||||
|
private String isSsidHiddenStr = "YES";
|
||||||
|
|
||||||
|
private UDPReceiver udpReceiver = null;
|
||||||
|
private DatagramSocket sendSocket = null;
|
||||||
|
ProgressDialog mDialog = null;
|
||||||
|
|
||||||
|
private static final int REPLY_BYTE_CONFIRM_TIMES = 5;
|
||||||
|
|
||||||
|
public void init(AppCompatActivity activity) {
|
||||||
wifiUtil = new WifiUtil(activity);
|
wifiUtil = new WifiUtil(activity);
|
||||||
sp = SPUtil.getInstance(activity);
|
sp = SPUtil.getInstance(activity);
|
||||||
curActivity = activity;
|
curActivity = activity;
|
||||||
|
mDialog = new ProgressDialog(activity);
|
||||||
|
if (sendSocket != null) {
|
||||||
|
sendSocket.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void connectDeviceByAirKiss(AppCompatActivity activity, String ssid, String password) {
|
public void connectDeviceByAirKiss(AppCompatActivity activity, String ssid, String bssid, String password) {
|
||||||
if (sendSubscribe != null && sendSubscribe.isUnsubscribed()) {
|
if (sendSubscribe != null && sendSubscribe.isUnsubscribed()) {
|
||||||
sendSubscribe.unsubscribe();
|
sendSubscribe.unsubscribe();
|
||||||
}
|
}
|
||||||
|
|
@ -91,145 +107,120 @@ public class AirKissUtil {
|
||||||
receiveSubscribe.unsubscribe();
|
receiveSubscribe.unsubscribe();
|
||||||
}
|
}
|
||||||
AirKissEncoder airKissEncoder = new AirKissEncoder(ssid, password);
|
AirKissEncoder airKissEncoder = new AirKissEncoder(ssid, password);
|
||||||
|
// smartLinkExportObject.connectWithSSID(ssid, password, handler);
|
||||||
|
|
||||||
//发送AirKiss
|
//注册udp接收器
|
||||||
|
// udpReceiver = new UDPReceiver(wifiUtil, new UdpCallback() {
|
||||||
|
// @Override
|
||||||
|
// public void onReceive(String data) {
|
||||||
|
// Log.e("LHD test9999999990", "收到的udp包 数据:" + data);
|
||||||
|
// curActivity.runOnUiThread(new Runnable() {
|
||||||
|
// @Override
|
||||||
|
// public void run() {
|
||||||
|
// if (mDialog != null) {
|
||||||
|
// mDialog.dismiss();
|
||||||
|
// }
|
||||||
|
// ToastUtil.show(curActivity, "接收到设备包:" + data);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// @Override
|
||||||
|
// public void onError(String error) {
|
||||||
|
// if (mDialog != null) {
|
||||||
|
// mDialog.dismiss();
|
||||||
|
// }
|
||||||
|
// LogUtils.d("LHD 设备绑定失败:" + error);
|
||||||
|
// ToastUtil.showLong(curActivity, "设备绑定失败:" + error);
|
||||||
|
// }
|
||||||
|
// });
|
||||||
|
// udpReceiver.start();
|
||||||
|
|
||||||
|
// 发送AirKiss
|
||||||
sendSubscribe = Observable.create(new Observable.OnSubscribe<String>() {
|
sendSubscribe = Observable.create(new Observable.OnSubscribe<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void call(Subscriber<? super String> subscriber) {
|
public void call(Subscriber<? super String> subscriber) {
|
||||||
subscriber.onNext("start");
|
subscriber.onNext("start");
|
||||||
byte[] sendBuffer = new byte[1500];
|
byte[] DUMMY_DATA = new byte[1500];
|
||||||
try (DatagramSocket sendSocket = new DatagramSocket()) {
|
AirKissEncoder airKissEncoder = new AirKissEncoder(ssid, password);
|
||||||
// 创建一个新的DatagramSocket对象,此时系统会随机分配一个可用的UDP端口号。
|
DatagramSocket sendSocket = null;
|
||||||
// 设置该DatagramSocket为广播模式,允许向广播地址发送数据包。
|
try {
|
||||||
|
sendSocket = new DatagramSocket();
|
||||||
sendSocket.setBroadcast(true);
|
sendSocket.setBroadcast(true);
|
||||||
// 从AirKissEncoder对象中获取编码后的数据数组。
|
int encoded_data[] = airKissEncoder.getEncodedData();
|
||||||
int[] encoded_data = airKissEncoder.getEncodedData();
|
for (int i = 0; i < encoded_data.length; ++i) {
|
||||||
for (int i = 0; i < 2; i++) {
|
DatagramPacket pkg = new DatagramPacket(DUMMY_DATA,
|
||||||
for (int encoded_datum : encoded_data) {
|
encoded_data[i],
|
||||||
DatagramPacket pkg = new DatagramPacket(sendBuffer, encoded_datum, InetAddress.getByName("255.255.255.255"), 10000);
|
InetAddress.getByName("255.255.255.255"),
|
||||||
sendSocket.send(pkg);
|
10000);
|
||||||
Thread.sleep(4);
|
// LogUtils.d("LHD 发送的包:encoded_datum = "+ encoded_data[i]);
|
||||||
}
|
sendSocket.send(pkg);
|
||||||
LogUtils.d("LHD 从AirKissEncoder对象中获取编码后的数据数组 encoded_data = "+ Arrays.toString(encoded_data));
|
Thread.sleep(4);
|
||||||
Thread.sleep(200);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
subscriber.onCompleted();
|
subscriber.onCompleted();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
subscriber.onError(e);
|
subscriber.onError(e);
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
sendSocket.close();
|
||||||
|
sendSocket.disconnect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.subscribeOn(Schedulers.io())
|
.subscribeOn(Schedulers.io())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribe(new Observer<String>() {
|
.subscribe(new Observer<String>() {
|
||||||
final ProgressDialog mDialog = new ProgressDialog(activity);
|
|
||||||
@Override
|
@Override
|
||||||
public void onCompleted() {
|
public void onCompleted() {
|
||||||
LogUtils.d("LHD onCompleted");
|
// ToastUtil.show(activity, "连接信号发送完成");
|
||||||
// device_mac = "";
|
|
||||||
// device_mac = wifiUtil.getConnectWifiBssid();
|
|
||||||
// hm.queryStoreName(new HttpListener<BaseBean<List<String>>>() {
|
|
||||||
// @Override
|
|
||||||
// public void success(final BaseBean<List<String>> baseBean) {
|
|
||||||
// activity.runOnUiThread(new Runnable() {
|
|
||||||
// @Override
|
|
||||||
// public void run() {
|
|
||||||
// new PetPopupChoice(activity, new PetPopupChoice.OnChoiceListener() {
|
|
||||||
// @Override
|
|
||||||
// public void onChoice(String s) {
|
|
||||||
// doPostBindDevice(s);
|
|
||||||
// }
|
|
||||||
// }, baseBean.data).showDialog();
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void error(Exception e, String msg) {
|
|
||||||
//// resetWifiContentView();
|
|
||||||
// ToastUtil.show(activity, msg);
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// @Override
|
|
||||||
// public void finish() {
|
|
||||||
//
|
|
||||||
// }
|
|
||||||
// }, Commons.USER.getUserId());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError(Throwable e) {
|
public void onError(Throwable e) {
|
||||||
LogUtils.d("LHD onError");
|
LogUtils.d("LHD onError e "+e.getLocalizedMessage());
|
||||||
ToastUtil.show(activity, "连接失败: " + e.getMessage());
|
ToastUtil.show(activity, "连接失败: " + e.getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onNext(String string) {
|
public void onNext(String string) {
|
||||||
LogUtils.d("LHD send onNext =" + string);
|
LogUtils.d("LHD send onNext =" + string);
|
||||||
|
if (mDialog != null) {
|
||||||
|
mDialog.dismiss();
|
||||||
|
mDialog.setTitle("配网中");
|
||||||
|
mDialog.setMessage("发送配网信息...");
|
||||||
|
mDialog.setCancelable(false);
|
||||||
|
mDialog.show();
|
||||||
|
}
|
||||||
|
|
||||||
mDialog.setTitle("配网");
|
|
||||||
mDialog.setMessage("发送配网信息...");
|
|
||||||
mDialog.setCancelable(false);
|
|
||||||
mDialog.show();
|
|
||||||
new Handler().postDelayed(new Runnable() {
|
new Handler().postDelayed(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
//发送配网ssid pwd,因为字节发送需要时间比较久,此处只是设置比较短的提示,但实际上后台线程还在发送中。
|
//发送配网ssid pwd,因为字节发送需要时间比较久,此处只是设置比较短的提示,但实际上后台线程还在发送中。
|
||||||
mDialog.dismiss();
|
if (mDialog != null) {
|
||||||
receiveUDPPackage(activity);
|
mDialog.dismiss();
|
||||||
|
mDialog.setTitle("连接设备");
|
||||||
|
mDialog.setMessage("正在接受设备信息,请耐心等待...");
|
||||||
|
mDialog.setCancelable(false);
|
||||||
|
mDialog.show();
|
||||||
|
// receiveUDPPackage(curActivity);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}, 5000);
|
}, 5000);
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
public void receiveUDPPackage(AppCompatActivity activity) {
|
|
||||||
//接收udp包
|
//接收udp包
|
||||||
receiveSubscribe = Observable.create(new Observable.OnSubscribe<String>() {
|
receiveSubscribe = Observable.create(new Observable.OnSubscribe<String>() {
|
||||||
@Override
|
@Override
|
||||||
public void call(Subscriber<? super String> subscriber) {
|
public void call(Subscriber<? super String> subscriber) {
|
||||||
try (DatagramSocket udpServerSocket = new DatagramSocket(10000)) {
|
receivePackage(airKissEncoder, subscriber);
|
||||||
udpServerSocket.setSoTimeout(1000 * 60);
|
|
||||||
while (true) {
|
|
||||||
byte[] buffer = new byte[1024];
|
|
||||||
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
|
|
||||||
udpServerSocket.receive(packet);
|
|
||||||
buffer = packet.getData();
|
|
||||||
|
|
||||||
Log.e("LHD test9999999990","收到的udp包 1:" + new String(buffer));
|
|
||||||
String hexString = Str_Hex.byte2hex(buffer);
|
|
||||||
Log.e("LHD test9999999990","收到的udp包地址:" + packet.getAddress() + "///"+ WifiUtil.intToIp(wifiUtil.getConnectIpAddress()));
|
|
||||||
Log.e("LHD test9999999990","收到的udp包 2:" + hexString);
|
|
||||||
|
|
||||||
LogUtils.d("LHD airkiss = "+packet.getSocketAddress()+" port = "+packet.getPort());
|
|
||||||
//对收到的UDP包进行解码
|
|
||||||
//各个设备返回的UDP包格式不一样 将解码的UDP包通过RxJava发送到主线程 进行UI处理
|
|
||||||
if (!TextUtils.isEmpty(hexString)) {
|
|
||||||
Log.d("LHD received:", hexString);
|
|
||||||
subscriber.onNext(hexString);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriber.onCompleted();
|
|
||||||
} catch (SocketException e) {
|
|
||||||
LogUtils.d("LHD SocketException : " + e.getLocalizedMessage());
|
|
||||||
subscriber.onError(e);
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (IOException e) {
|
|
||||||
LogUtils.d("LHD IOException : " + e.getLocalizedMessage());
|
|
||||||
subscriber.onError(e);
|
|
||||||
e.printStackTrace();
|
|
||||||
} finally {
|
|
||||||
LogUtils.d("LHD received finally: ");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}).subscribeOn(Schedulers.newThread())
|
}).subscribeOn(Schedulers.newThread())
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
.subscribe(new Subscriber<String>() {
|
.subscribe(new Subscriber<String>() {
|
||||||
final ProgressDialog mDialog = new ProgressDialog(activity);
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart() {
|
public void onStart() {
|
||||||
super.onStart();
|
super.onStart();
|
||||||
|
|
@ -245,18 +236,71 @@ public class AirKissUtil {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError(Throwable e) {
|
public void onError(Throwable e) {
|
||||||
ToastUtil.show(activity, "连接失败: " + e.getMessage());
|
Toast.makeText(curActivity, "连接失败: " + e.getMessage(), Toast.LENGTH_SHORT).show();
|
||||||
LogUtils.d("LHD received 连接失败: "+e.getMessage());
|
|
||||||
mDialog.dismiss();
|
mDialog.dismiss();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onNext(String s) {
|
public void onNext(String s) {
|
||||||
ToastUtil.show(activity, "收到的UDP包:" + s);
|
if ("success".equals(s)) {
|
||||||
doPostBindDevice();
|
Toast.makeText(curActivity, "配网成功:", Toast.LENGTH_SHORT).show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void receivePackage(AirKissEncoder airKissEncoder, Subscriber subscriber) {
|
||||||
|
byte[] buffer = new byte[15000];
|
||||||
|
DatagramSocket udpServerSocket = null;
|
||||||
|
char mRandomChar = airKissEncoder.getRandomChar();//获取UDP数据包中的随机字符
|
||||||
|
try {
|
||||||
|
int replyByteCounter = 0;
|
||||||
|
udpServerSocket = new DatagramSocket(10000);
|
||||||
|
udpServerSocket.setSoTimeout(1000 * 60);//设置超时时间
|
||||||
|
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
|
||||||
|
while (true) {
|
||||||
|
udpServerSocket.receive(packet);
|
||||||
|
|
||||||
|
if(!packet.getAddress().getHostAddress().equals(WifiUtil.intToIp(wifiUtil.getConnectIpAddress()))){
|
||||||
|
byte[] receivedData = packet.getData();
|
||||||
|
Log.d("LHD","收到消息:"+ Arrays.toString(receivedData));
|
||||||
|
|
||||||
|
if (receivedData!=null){
|
||||||
|
String mac = ByteUtil.parseBssid(
|
||||||
|
receivedData,
|
||||||
|
1,
|
||||||
|
6);
|
||||||
|
device_mac = mac;
|
||||||
|
LogUtils.d("LHD 获取到的mac地址 = "+mac);
|
||||||
|
if (!TextUtils.isEmpty(device_mac)){
|
||||||
|
stopAirKiss();
|
||||||
|
doPostBindDevice();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
});
|
for (byte b : receivedData) {
|
||||||
|
if (b == mRandomChar)
|
||||||
|
replyByteCounter++;
|
||||||
|
}
|
||||||
|
if (replyByteCounter > REPLY_BYTE_CONFIRM_TIMES) {
|
||||||
|
subscriber.onNext("success");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
subscriber.onCompleted();
|
||||||
|
} catch (SocketException e) {
|
||||||
|
subscriber.onError(e);
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
subscriber.onError(e);
|
||||||
|
e.printStackTrace();
|
||||||
|
} finally {
|
||||||
|
udpServerSocket.close();
|
||||||
|
udpServerSocket.disconnect();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -346,8 +390,18 @@ public class AirKissUtil {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void stopAirKiss() {
|
||||||
|
if (sendSocket != null) {
|
||||||
|
sendSocket.close();
|
||||||
|
sendSocket.disconnect();
|
||||||
|
}
|
||||||
|
if (udpReceiver != null) {
|
||||||
|
udpReceiver.stopRunning();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void unSubscribe() {
|
public void unSubscribe() {
|
||||||
|
stopAirKiss();
|
||||||
if (sendSubscribe != null && sendSubscribe.isUnsubscribed()) {
|
if (sendSubscribe != null && sendSubscribe.isUnsubscribed()) {
|
||||||
sendSubscribe.unsubscribe();
|
sendSubscribe.unsubscribe();
|
||||||
}
|
}
|
||||||
|
|
@ -466,7 +520,7 @@ public class AirKissUtil {
|
||||||
i.setClass(curActivity, MainSeven_2F_ControlActivity.class);
|
i.setClass(curActivity, MainSeven_2F_ControlActivity.class);
|
||||||
} else if (Device.TYPE_3F.equals(type)) {
|
} else if (Device.TYPE_3F.equals(type)) {
|
||||||
i.setClass(curActivity, MainFour_3F_ControlActivity.class);
|
i.setClass(curActivity, MainFour_3F_ControlActivity.class);
|
||||||
} else if (Device.TYPE_4F.equals(type) || Device.TYPE_5F.equals(type)){
|
} else if (Device.TYPE_4F.equals(type) || Device.TYPE_5F.equals(type)) {
|
||||||
i.setClass(curActivity, MainSix_4F_ControlActivity.class);
|
i.setClass(curActivity, MainSix_4F_ControlActivity.class);
|
||||||
} else {
|
} else {
|
||||||
if (controlAmount == null) {//如果控制器返回空 则默认给三控的页面
|
if (controlAmount == null) {//如果控制器返回空 则默认给三控的页面
|
||||||
|
|
@ -541,7 +595,7 @@ public class AirKissUtil {
|
||||||
};
|
};
|
||||||
|
|
||||||
private void resetWifiContentView() {
|
private void resetWifiContentView() {
|
||||||
ToastUtil.show(curActivity,"重置联网view");
|
ToastUtil.show(curActivity, "重置联网view");
|
||||||
}
|
}
|
||||||
|
|
||||||
Handler doPostBindDeviceHandler = new Handler() {
|
Handler doPostBindDeviceHandler = new Handler() {
|
||||||
|
|
@ -610,7 +664,7 @@ public class AirKissUtil {
|
||||||
i.setClass(curActivity, MainSeven_2F_ControlActivity.class);
|
i.setClass(curActivity, MainSeven_2F_ControlActivity.class);
|
||||||
} else if (Device.TYPE_3F.equals(type)) {
|
} else if (Device.TYPE_3F.equals(type)) {
|
||||||
i.setClass(curActivity, MainFour_3F_ControlActivity.class);
|
i.setClass(curActivity, MainFour_3F_ControlActivity.class);
|
||||||
} else if (Device.TYPE_4F.equals(type) || Device.TYPE_5F.equals(type)){
|
} else if (Device.TYPE_4F.equals(type) || Device.TYPE_5F.equals(type)) {
|
||||||
i.setClass(curActivity, MainSix_4F_ControlActivity.class);
|
i.setClass(curActivity, MainSix_4F_ControlActivity.class);
|
||||||
} else {
|
} else {
|
||||||
if (controlAmount == null) {//如果控制器返回空 则默认给三控的页面
|
if (controlAmount == null) {//如果控制器返回空 则默认给三控的页面
|
||||||
|
|
@ -700,4 +754,61 @@ public class AirKissUtil {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
private IEsptouchTask mEsptouchTask;
|
||||||
|
private CountDownTimer wifiTimer;
|
||||||
|
private boolean isTimeout = true;
|
||||||
|
|
||||||
|
public void stopTimer() {
|
||||||
|
if (wifiTimer != null) {
|
||||||
|
wifiTimer.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class EsptouchAsyncTask2 extends AsyncTask<String, Void, IEsptouchResult> {
|
||||||
|
@Override
|
||||||
|
protected void onPreExecute() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected IEsptouchResult doInBackground(String... params) {
|
||||||
|
String apSsid = params[0];
|
||||||
|
String apBssid = params[1];
|
||||||
|
String apPassword = params[2];
|
||||||
|
String isSsidHiddenStr = params[3];
|
||||||
|
|
||||||
|
L.i(apSsid + apBssid + apPassword + isSsidHiddenStr);
|
||||||
|
mEsptouchTask = new EsptouchTask(apSsid, apBssid, apPassword, curActivity);
|
||||||
|
IEsptouchResult result = mEsptouchTask.executeForResult();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostExecute(IEsptouchResult result) {
|
||||||
|
stopTimer();
|
||||||
|
if (isTimeout) {
|
||||||
|
try {
|
||||||
|
if (!result.isCancelled()) {
|
||||||
|
if (result.isSuc()) {
|
||||||
|
device_mac = "";
|
||||||
|
device_mac = result.getBssid();
|
||||||
|
|
||||||
|
L.i("LHD 绑定的Mac地址" + device_mac);
|
||||||
|
// doPostBindDevice();
|
||||||
|
} else {
|
||||||
|
ToastUtil.show(curActivity, "绑定设备失败 请重试");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ToastUtil.show(curActivity, "绑定设备失败 请重试");
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
ToastUtil.show(curActivity, "绑定设备失败 请重试");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
//
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,89 @@
|
||||||
|
package com.ifish.activity.newbind;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.pm.ApplicationInfo;
|
||||||
|
import android.net.ConnectivityManager;
|
||||||
|
import android.net.NetworkInfo;
|
||||||
|
import android.net.wifi.WifiInfo;
|
||||||
|
import android.net.wifi.WifiManager;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
|
|
||||||
|
public class DeviceUtils {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 隐藏软键盘
|
||||||
|
* <p>
|
||||||
|
* {@link InputMethodManager#hideSoftInputFromWindow}第一个参数如果使用getCurrentFocus.getWindowToken,在使用模拟器调试时,
|
||||||
|
* 存在获取不到焦点的情况,故会出现空指针异常。
|
||||||
|
*
|
||||||
|
* @param view 任意一个当前layout的view
|
||||||
|
*/
|
||||||
|
public static void hideKeyboard(View view) {
|
||||||
|
InputMethodManager inputMethodManager = (InputMethodManager) view.getContext()
|
||||||
|
.getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
if (inputMethodManager != null) {
|
||||||
|
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 判断网络连接是否是WiFi,否则返回false
|
||||||
|
*/
|
||||||
|
public static boolean isWifi(Context context) {
|
||||||
|
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
|
if (cm != null) {
|
||||||
|
NetworkInfo netInfo = cm.getActiveNetworkInfo();
|
||||||
|
if (netInfo != null && netInfo.isConnected()) {
|
||||||
|
return netInfo.getType() == ConnectivityManager.TYPE_WIFI;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static String getSSID(Context context) {
|
||||||
|
String ssid = "unknown id";
|
||||||
|
//android 8.1
|
||||||
|
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O_MR1){
|
||||||
|
ConnectivityManager connManager = (ConnectivityManager) context.getApplicationContext().
|
||||||
|
getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
|
assert connManager != null;
|
||||||
|
NetworkInfo networkInfo = connManager.getActiveNetworkInfo();
|
||||||
|
if (networkInfo.isConnected()){
|
||||||
|
Log.e("DeviceUtils", "getSSID111: "+ networkInfo.getExtraInfo() );
|
||||||
|
if (networkInfo.getExtraInfo() != null){
|
||||||
|
return networkInfo.getExtraInfo().replace("\"","");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
if (isWifi(context)){
|
||||||
|
final WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
|
||||||
|
WifiInfo connectionInfo = null;
|
||||||
|
if (wifiManager != null) {
|
||||||
|
connectionInfo = wifiManager.getConnectionInfo();
|
||||||
|
}
|
||||||
|
if (connectionInfo != null) {
|
||||||
|
ssid = connectionInfo.getSSID();
|
||||||
|
Log.e("DeviceUtils", "getSSID: "+ssid );
|
||||||
|
if (ssid.startsWith("\"") && ssid.endsWith("\"")) {
|
||||||
|
ssid = ssid.replaceAll("^\"|\"$", "");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ssid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isApkDebuggable(Context context){
|
||||||
|
try {
|
||||||
|
ApplicationInfo info = context.getApplicationInfo();
|
||||||
|
return (info.flags & ApplicationInfo.FLAG_DEBUGGABLE)!=0;
|
||||||
|
}catch (Exception e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -1,6 +1,12 @@
|
||||||
package com.ifish.activity.newbind;
|
package com.ifish.activity.newbind;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.AlertDialog;
|
||||||
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
@ -11,6 +17,7 @@ import android.widget.LinearLayout;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
||||||
import com.ifish.activity.BindCameraActivity;
|
import com.ifish.activity.BindCameraActivity;
|
||||||
|
|
@ -62,7 +69,7 @@ public class NewBindDeviceActivity extends AppCompatActivity {
|
||||||
//---------------工具类--------------------//
|
//---------------工具类--------------------//
|
||||||
private CheckWifiUtil checkWifiUtil;
|
private CheckWifiUtil checkWifiUtil;
|
||||||
private AirKissUtil airKissUtil;
|
private AirKissUtil airKissUtil;
|
||||||
|
private String bssid = "";
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
|
|
@ -76,7 +83,7 @@ public class NewBindDeviceActivity extends AppCompatActivity {
|
||||||
airKissUtil.init(this);
|
airKissUtil.init(this);
|
||||||
devicetype = getIntent().getStringExtra("devicetype");
|
devicetype = getIntent().getStringExtra("devicetype");
|
||||||
//默认AP连网
|
//默认AP连网
|
||||||
curConnectType = ConnectType.APConnect;
|
curConnectType = ConnectType.AirKiss;
|
||||||
switchUIConnectType(curConnectType);
|
switchUIConnectType(curConnectType);
|
||||||
EventBus.getDefault().register(this);
|
EventBus.getDefault().register(this);
|
||||||
}
|
}
|
||||||
|
|
@ -95,7 +102,7 @@ public class NewBindDeviceActivity extends AppCompatActivity {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
tvWifiName.setText(wifiname);
|
tvWifiName.setText(wifiname);
|
||||||
|
bssid = wifiAdmin.getBSSID();
|
||||||
if (!TextUtils.isEmpty(wifiname)) {
|
if (!TextUtils.isEmpty(wifiname)) {
|
||||||
String pwd = KVUtil.getString(wifiname, "");
|
String pwd = KVUtil.getString(wifiname, "");
|
||||||
tvWifiPwd.setText(pwd);
|
tvWifiPwd.setText(pwd);
|
||||||
|
|
@ -212,6 +219,7 @@ public class NewBindDeviceActivity extends AppCompatActivity {
|
||||||
lineApTip.setVisibility(View.GONE);
|
lineApTip.setVisibility(View.GONE);
|
||||||
//通用提示布局
|
//通用提示布局
|
||||||
tvTips.setVisibility(View.VISIBLE);
|
tvTips.setVisibility(View.VISIBLE);
|
||||||
|
airKissUtil.stopAirKiss();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -250,6 +258,7 @@ public class NewBindDeviceActivity extends AppCompatActivity {
|
||||||
* 根据连接类型去连接设备
|
* 根据连接类型去连接设备
|
||||||
*/
|
*/
|
||||||
public void connectDevice() {
|
public void connectDevice() {
|
||||||
|
airKissUtil.stopAirKiss();
|
||||||
//根据选择的连网类型跳转不同的逻辑
|
//根据选择的连网类型跳转不同的逻辑
|
||||||
String ssid = tvWifiName.getText().toString();
|
String ssid = tvWifiName.getText().toString();
|
||||||
String pwd = tvWifiPwd.getText().toString();
|
String pwd = tvWifiPwd.getText().toString();
|
||||||
|
|
@ -288,7 +297,7 @@ public class NewBindDeviceActivity extends AppCompatActivity {
|
||||||
case AirKiss:
|
case AirKiss:
|
||||||
// 处理AirKiss逻辑
|
// 处理AirKiss逻辑
|
||||||
ToastUtil.show(NewBindDeviceActivity.this, "开始AirKiss连网...");
|
ToastUtil.show(NewBindDeviceActivity.this, "开始AirKiss连网...");
|
||||||
airKissUtil.connectDeviceByAirKiss(this,ssid,pwd);
|
airKissUtil.connectDeviceByAirKiss(this,ssid,bssid,pwd);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -328,4 +337,44 @@ public class NewBindDeviceActivity extends AppCompatActivity {
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//检查位置权限
|
||||||
|
public boolean checkPermission(Activity context) {
|
||||||
|
//9.0以前版本获取wifi ssid不用申请此权限
|
||||||
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.P) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
int result = context.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION);
|
||||||
|
if (result == PackageManager.PERMISSION_GRANTED) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
String[] permission = {Manifest.permission.ACCESS_COARSE_LOCATION};
|
||||||
|
context.requestPermissions(permission, 1001);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||||
|
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||||
|
if (requestCode == 1001) {
|
||||||
|
if (grantResults.length > 0 && PackageManager.PERMISSION_GRANTED == grantResults[0]) {
|
||||||
|
if (DeviceUtils.isWifi(this)) {
|
||||||
|
// ssidET.setText(DeviceUtils.getSSID(this));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
|
||||||
|
alertDialog.setTitle("权限拒绝");
|
||||||
|
alertDialog.setMessage("请在设置中打开此应用的位置权限后重试");
|
||||||
|
alertDialog.setCancelable(false);
|
||||||
|
alertDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
alertDialog.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
@ -3,9 +3,11 @@ package com.ifish.airkiss;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.ifish.utils.WifiUtil;
|
import com.ifish.utils.WifiUtil;
|
||||||
|
import com.lidroid.xutils.util.LogUtils;
|
||||||
|
|
||||||
import java.net.DatagramPacket;
|
import java.net.DatagramPacket;
|
||||||
import java.net.DatagramSocket;
|
import java.net.DatagramSocket;
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
import java.net.SocketException;
|
import java.net.SocketException;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
|
||||||
|
|
@ -16,7 +18,7 @@ import java.nio.charset.StandardCharsets;
|
||||||
*/
|
*/
|
||||||
// 创建一个接收器类
|
// 创建一个接收器类
|
||||||
public class UDPReceiver extends Thread {
|
public class UDPReceiver extends Thread {
|
||||||
private static final int MAX_UDP_DATAGRAM_LEN = 1500;
|
private static final int MAX_UDP_DATAGRAM_LEN = 15000;
|
||||||
private DatagramSocket mSocket;
|
private DatagramSocket mSocket;
|
||||||
private boolean mRunning;
|
private boolean mRunning;
|
||||||
private UdpCallback resultBack;
|
private UdpCallback resultBack;
|
||||||
|
|
@ -32,7 +34,9 @@ public class UDPReceiver extends Thread {
|
||||||
mSocket = null;
|
mSocket = null;
|
||||||
}
|
}
|
||||||
// 创建一个UDP套接字
|
// 创建一个UDP套接字
|
||||||
mSocket = new DatagramSocket(10000);
|
mSocket = new DatagramSocket(null);
|
||||||
|
mSocket.bind(new InetSocketAddress(10000));
|
||||||
|
mSocket.setSoTimeout(1000 * 60);
|
||||||
} catch (SocketException e) {
|
} catch (SocketException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
@ -46,15 +50,22 @@ public class UDPReceiver extends Thread {
|
||||||
|
|
||||||
while (mRunning) {
|
while (mRunning) {
|
||||||
try {
|
try {
|
||||||
|
LogUtils.d("LHD 开始接受");
|
||||||
// 接收UDP数据包
|
// 接收UDP数据包
|
||||||
mSocket.receive(packet);
|
mSocket.receive(packet);
|
||||||
// String hexString = Str_Hex.byte2hex(packet.getData());
|
String ip3 = WifiUtil.intToIp(wifiUtil.getConnectIpAddress());
|
||||||
String data = new String(packet.getData(), 0, packet.getLength(), StandardCharsets.UTF_8);
|
LogUtils.d("LHD 开始接受 = "+" ip3 = "+ip3);
|
||||||
Log.e("test9999999990","收到的udp包 ip=" + packet.getAddress().getHostAddress());
|
// Log.e("LHD test9999999990","收到的udp包 ip=" + packet.getAddress().getHostAddress()+" ip3 = "+ip3);
|
||||||
// 处理接收到的数据
|
// 处理接收到的数据
|
||||||
if(!packet.getAddress().getHostAddress().equals(WifiUtil.intToIp(wifiUtil.getConnectIpAddress()))){
|
if(!packet.getAddress().getHostAddress().equals(WifiUtil.intToIp(wifiUtil.getConnectIpAddress()))){
|
||||||
handleData(data);
|
String data = new String(packet.getData(), 0, packet.getLength(), StandardCharsets.UTF_8);
|
||||||
|
String hexString = Str_Hex.byte2hex(packet.getData());
|
||||||
|
handleData(hexString);
|
||||||
}
|
}
|
||||||
|
}catch (SocketException e) {
|
||||||
|
LogUtils.d("LHD SocketException : " + e.getLocalizedMessage());
|
||||||
|
handleErrorData(e.toString());
|
||||||
|
e.printStackTrace();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
handleErrorData(e.toString());
|
handleErrorData(e.toString());
|
||||||
|
|
@ -79,6 +90,7 @@ public class UDPReceiver extends Thread {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleErrorData(String data) {
|
private void handleErrorData(String data) {
|
||||||
|
stopRunning();
|
||||||
// 处理接收到的数据
|
// 处理接收到的数据
|
||||||
if(resultBack != null){
|
if(resultBack != null){
|
||||||
resultBack.onError(data);
|
resultBack.onError(data);
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,11 @@ public class ToastUtil {
|
||||||
public static void show( Context context,CharSequence text) {
|
public static void show( Context context,CharSequence text) {
|
||||||
showToast(context.getApplicationContext(),text, false);
|
showToast(context.getApplicationContext(),text, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void showLong( Context context,CharSequence text) {
|
||||||
|
showLongToast(context.getApplicationContext(),text, false);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 特殊情况显示的toast
|
* 特殊情况显示的toast
|
||||||
*/
|
*/
|
||||||
|
|
@ -92,6 +97,16 @@ public class ToastUtil {
|
||||||
tipToast.show();
|
tipToast.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void showLongToast(Context context, CharSequence message, boolean isShowIco) {
|
||||||
|
if (tipToast == null) {
|
||||||
|
tipToast = TipsToast.makeText(context, message, Toast.LENGTH_LONG);
|
||||||
|
} else {
|
||||||
|
tipToast.setText(message);
|
||||||
|
}
|
||||||
|
// tipToast.setIsShowIco(isShowIco);
|
||||||
|
tipToast.show();
|
||||||
|
}
|
||||||
|
|
||||||
// public static void showToast(int message) {
|
// public static void showToast(int message) {
|
||||||
// showToast(BaseApplication.getInstance().getString(message), false);
|
// showToast(BaseApplication.getInstance().getString(message), false);
|
||||||
// }
|
// }
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue