This commit is contained in:
jia 2024-12-10 00:54:52 +08:00
parent 4b32355941
commit b6fa55f36a
10 changed files with 439 additions and 516 deletions

View File

@ -174,7 +174,7 @@ dependencies {
implementation 'com.tencent:mmkv:2.0.0'
implementation("com.github.bumptech.glide:okhttp3-integration:4.11.0" )
implementation 'com.github.Jasonchenlijian:FastBle:2.4.0'
// implementation 'com.github.Jasonchenlijian:FastBle:2.4.0'
//
// annotationProcessor 'com.github.bumptech.glide:compiler:3.7.0'
// implementation 'com.getui:gtsdk:3.3.7.0' //SDK

View File

@ -18,7 +18,7 @@
android:normalScreens="true"
android:smallScreens="true"
android:xlargeScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- // jiablue-->
@ -29,61 +29,21 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 访问网络 -->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- zxing -->
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- bugly -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 必选 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <!-- 【必选】用以设置前台是否显示通知 -->
<uses-permission android:name="android.permission.GET_TASKS" /> <!-- 可选 -->
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_ADDED" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_CHANGED" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_INSTALL" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REPLACED" />
<!-- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> &lt;!&ndash; 【必选】用以设置前台是否显示通知 &ndash;&gt;-->
<permission
android:name="com.ifish.activity.permission.JPUSH_MESSAGE"
android:protectionLevel="signature" /> <!-- Required 一些系统要求的权限,如访问网络等 -->
<uses-permission android:name="com.ifish.activity.permission.JPUSH_MESSAGE" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- talkingdata统计 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 友盟 -->
<!-- <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />-->
<!-- <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />-->
<!-- 蓝牙权限需求 -->
@ -102,23 +62,9 @@
android:required="true" />
-->
<!-- 检测网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 获取mac地址作为用户的备用唯一标识 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 获取用户手机的IMEI用来唯一的标识用户 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 允许应用程序联网,以便向我们的服务器端发送数据 -->
<uses-permission android:name="android.permission.INTERNET" /> <!-- 定位所需的权限 -->
<!-- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> -->
<!-- <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> -->
<!-- 推送相关的权限 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" /> <!-- 下载apk -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION" /> <!-- Bugtags SDK -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- android13变更 -->
<!-- 缓存资源优先存入SDcard -->
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
@ -135,48 +81,8 @@
<uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
tools:ignore="ProtectedPermissions" /> <!-- <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> -->
<!-- ###################声明友盟分享SDK使用的相关权限###################### -->
<!-- 检测网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 获取mac地址作为用户的备用唯一标识 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 允许应用程序联网,以便向我们的服务器端发送数据 -->
<uses-permission android:name="android.permission.INTERNET" /> <!-- ###################声明友盟分享SDK使用的相关权限###################### -->
<!-- 网易云信 -->
<!-- 权限声明 -->
<!-- 访问网络状态 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 控制呼吸灯,振动器等,用于新消息提醒 -->
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.VIBRATE" /> <!-- 多媒体相关 -->
<uses-permission android:name="android.permission.CAMERA" /> <!-- SDK 权限申明, 第三方 APP 接入时,请将 com.netease.nim.demo 替换为自己的包名 -->
<!-- 和下面的 uses-permission 一起加入到你的 AndroidManifest 文件中。 -->
<permission
android:name="com.ifish.activity.permission.RECEIVE_MSG"
android:protectionLevel="signature" /> <!-- 接收 SDK 消息广播权限, 第三方 APP 接入时,请将 com.netease.nim.demo 替换为自己的包名 -->
<uses-permission android:name="com.ifish.activity.permission.RECEIVE_MSG" /> <!-- 网易云信 -->
<!-- 友盟微社区精简版 -->
<!-- ###################声明SDK使用的相关权限###################### -->
<!-- 检测网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 获取mac地址作为用户的备用唯一标识 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 允许应用程序联网,以便向我们的服务器端发送数据 -->
<uses-permission android:name="android.permission.INTERNET" /> <!-- 推送相关的权限 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <!-- 可选 -->
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_ADDED" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_CHANGED" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_INSTALL" />
<uses-permission android:name="android.permission.BROADCAST_PACKAGE_REPLACED" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <!-- 允许task重排序 -->
<uses-permission android:name="android.permission.REORDER_TASKS" /> <!-- Android 13上新增的通知权限 -->
<!-- Android 13上新增的通知权限 -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <!-- 友盟微社区精简版 -->
<queries>
<package android:name="com.tencent.mm" />
@ -243,14 +149,14 @@
android:resource="@xml/filepaths" />
</provider>
<receiver
android:name="com.ifish.airkiss.UDPReceiver"
android:exported="true"
tools:ignore="Instantiatable">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
<!-- <receiver-->
<!-- android:name="com.ifish.airkiss.UDPReceiver"-->
<!-- android:exported="true"-->
<!-- tools:ignore="Instantiatable">-->
<!-- <intent-filter>-->
<!-- <action android:name="android.intent.action.BOOT_COMPLETED" />-->
<!-- </intent-filter>-->
<!-- </receiver>-->
<activity
android:name=".LoadingActivity"

View File

@ -24,8 +24,8 @@ import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.clj.fastble.BleManager;
//jjia-push
//import com.clj.fastble.BleManager;
import com.ifish.adapter.GridViewCameraBaseAdapter;
import com.ifish.adapter.GridViewDeviceBaseAdapter;
import com.ifish.basebean.BaseBean;
@ -370,7 +370,8 @@ public class DeviceCameraListActivity extends BaseActivity {
@Override
public void success(BaseBean<Device> baseBean) {
result = baseBean.result;
BleManager.getInstance().disconnectAllDevice();
//jjia-push
// BleManager.getInstance().disconnectAllDevice();
}
@Override

View File

@ -21,7 +21,7 @@ import android.widget.TextView;
import android.widget.Toast;
import com.jwkj.soundwave.SoundWaveManager;
import com.ifish.airkiss.AirKissEncoder;
import com.ifish.airkiss.UDPReceiver;
//import com.ifish.airkiss.UDPReceiver;
import com.ifish.airkiss.UdpCallback;
import com.ifish.basebean.BaseBean;
import com.ifish.basebean.ConnectMessageEvent;
@ -83,7 +83,8 @@ public class NewBindDeviceChoiceActivity extends BaseActivity implements View.On
private int deviceIsNullNum = 0;//循环请求次数
private CountDownTimer deviceIsNullTimer;
// private DatagramSocket sendSocket = null;
private UDPReceiver udpReceiver = null;
//jjia-udp
// private UDPReceiver udpReceiver = null;
private boolean isRegFilter;
private byte mAuthMode;
private byte AuthModeOpen = 0;

View File

@ -12,7 +12,6 @@ import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.ifish.activity.LoadingActivity;
import com.ifish.airkiss.AirKissEncoder;
import com.ifish.airkiss.UDPReceiver;
import com.ifish.basebean.BaseBean;
import com.ifish.basebean.Device;
import com.ifish.baseclass.BaseGradeActivity;
@ -71,8 +70,8 @@ public class AirKissUtil {
//当前需要连接的是什么设备
private String devicetype;
private UDPReceiver udpReceiver = null;
//jjia-udp
// private UDPReceiver udpReceiver = null;
private DatagramSocket sendSocket = null;
ProgressDialog mDialog = null;
@ -432,9 +431,9 @@ public class AirKissUtil {
sendSocket.close();
sendSocket.disconnect();
}
if (udpReceiver != null) {
udpReceiver.stopRunning();
}
// if (udpReceiver != null) {
// udpReceiver.stopRunning();
// }
}
public void unSubscribe() {

View File

@ -29,15 +29,15 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import com.clj.fastble.BleManager;
import com.clj.fastble.callback.BleGattCallback;
import com.clj.fastble.callback.BleMtuChangedCallback;
import com.clj.fastble.callback.BleNotifyCallback;
import com.clj.fastble.callback.BleScanCallback;
import com.clj.fastble.callback.BleWriteCallback;
import com.clj.fastble.data.BleDevice;
import com.clj.fastble.exception.BleException;
//jjia-push
//import com.clj.fastble.BleManager;
//import com.clj.fastble.callback.BleGattCallback;
//import com.clj.fastble.callback.BleMtuChangedCallback;
//import com.clj.fastble.callback.BleNotifyCallback;
//import com.clj.fastble.callback.BleScanCallback;
//import com.clj.fastble.callback.BleWriteCallback;
//import com.clj.fastble.data.BleDevice;
//import com.clj.fastble.exception.BleException;
import com.ifish.activity.BindCameraActivity;
import com.ifish.activity.BindTankActivity;
import com.ifish.activity.BindTankPetActivity;
@ -151,8 +151,8 @@ public class NewBindDeviceActivity extends AppCompatActivity {
devicetype = getIntent().getStringExtra("devicetype");
L.i("jjia----------------devicetype="+devicetype);
airKissUtil.init(this,devicetype);
BleManager.getInstance().disconnectAllDevice();
//jjia-push
// BleManager.getInstance().disconnectAllDevice();
if ("bluetooth".equals(type)){
curConnectType = BlueTooth;
}else {
@ -163,7 +163,8 @@ public class NewBindDeviceActivity extends AppCompatActivity {
switchUIConnectType(curConnectType);
if ("bluetooth".equals(type)){ // 主动去联网
currentDevice = getIntent().getParcelableExtra("device");
//jjia-push
// currentDevice = getIntent().getParcelableExtra("device");
}
EventBus.getDefault().register(this);
@ -471,39 +472,40 @@ public class NewBindDeviceActivity extends AppCompatActivity {
boolean support = BleManager.getInstance().isSupportBle();
if (!support){
ToastUtil.show(NewBindDeviceActivity.this,"当前设备不支持低功耗蓝牙");
} else {
boolean enable = BleManager.getInstance().isBlueEnable();
if (enable){
if (TextUtils.isEmpty(type)){
blueScan();
}else {
showDialog("开始连接蓝牙设备");
connectBle();
}
}else {
AlertDialog.Builder dialog = new AlertDialog.Builder(NewBindDeviceActivity.this, AlertDialog.THEME_HOLO_LIGHT);
dialog.setCancelable(false);
dialog.setMessage("蓝牙没有打开,现在去申请打开蓝牙,请允许后,再点击'确定'连接");
dialog.setPositiveButton("去申请", new DialogInterface.OnClickListener() {
@Override
public void onClick(
DialogInterface dialog,
int which) {
BlueToothUtil.openBlueTooth(NewBindDeviceActivity.this);
}
});
dialog.setNegativeButton("拒绝", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
dialog.show();
}
}
//jjia-push
// boolean support = BleManager.getInstance().isSupportBle();
// if (!support){
// ToastUtil.show(NewBindDeviceActivity.this,"当前设备不支持低功耗蓝牙");
// } else {
// boolean enable = BleManager.getInstance().isBlueEnable();
// if (enable){
// if (TextUtils.isEmpty(type)){
// blueScan();
// }else {
// showDialog("开始连接蓝牙设备");
// connectBle();
// }
// }else {
// AlertDialog.Builder dialog = new AlertDialog.Builder(NewBindDeviceActivity.this, AlertDialog.THEME_HOLO_LIGHT);
// dialog.setCancelable(false);
// dialog.setMessage("蓝牙没有打开,现在去申请打开蓝牙,请允许后,再点击'确定'连接");
// dialog.setPositiveButton("去申请", new DialogInterface.OnClickListener() {
// @Override
// public void onClick(
// DialogInterface dialog,
// int which) {
// BlueToothUtil.openBlueTooth(NewBindDeviceActivity.this);
// }
// });
// dialog.setNegativeButton("拒绝", new DialogInterface.OnClickListener() {
// @Override
// public void onClick(DialogInterface dialog, int which) {
// finish();
// }
// });
// dialog.show();
// }
// }
break;
case APConnect:
@ -518,43 +520,44 @@ public class NewBindDeviceActivity extends AppCompatActivity {
break;
}
}
private void blueScan(){
BleManager.getInstance().scan(new BleScanCallback() {
@Override
public void onScanFinished(List<BleDevice> scanResultList) {
if (currentDevice!=null){
connectBle();
}else {
ToastUtil.show(NewBindDeviceActivity.this,"扫描结束,没有搜索到可用设备");
dismissDialog();
}
}
@Override
public void onScanStarted(boolean success) {
// ToastUtil.show(NewBindDeviceActivity.this,"开始扫描");
showDialog("正在搜索附近设备,请确保设备处于配网状态");
}
@SuppressLint("MissingPermission")
@Override
public void onScanning(BleDevice bleDevice) {
if (bleDevice!=null && bleDevice.getDevice()!=null){
BluetoothDevice bean = bleDevice.getDevice();
if (!TextUtils.isEmpty(bean.getName()) && bean.getName().startsWith("ifish")){
currentDevice = bleDevice;
// tvname.setText(bean.getName()+bean.getAddress());
BleManager.getInstance().cancelScan();
}
L.i(bean.getName()+"jjia---------"+bean.getAddress());
}
}
});
}
//jjia-push
// private void blueScan(){
// BleManager.getInstance().scan(new BleScanCallback() {
// @Override
// public void onScanFinished(List<BleDevice> scanResultList) {
//
// if (currentDevice!=null){
// connectBle();
// }else {
// ToastUtil.show(NewBindDeviceActivity.this,"扫描结束,没有搜索到可用设备");
// dismissDialog();
// }
// }
//
// @Override
// public void onScanStarted(boolean success) {
//// ToastUtil.show(NewBindDeviceActivity.this,"开始扫描");
// showDialog("正在搜索附近设备,请确保设备处于配网状态");
// }
//
// @SuppressLint("MissingPermission")
// @Override
// public void onScanning(BleDevice bleDevice) {
// if (bleDevice!=null && bleDevice.getDevice()!=null){
// BluetoothDevice bean = bleDevice.getDevice();
// if (!TextUtils.isEmpty(bean.getName()) && bean.getName().startsWith("ifish")){
// currentDevice = bleDevice;
//// tvname.setText(bean.getName()+bean.getAddress());
// BleManager.getInstance().cancelScan();
// }
// L.i(bean.getName()+"jjia---------"+bean.getAddress());
// }
// }
// });
// }
private boolean isJump = false;
BleDevice currentDevice;
//jjia-push
// BleDevice currentDevice;
/**
* 1.跳转设置页面连接ifish-xxx的wifi连接成功后返回
*/
@ -633,138 +636,142 @@ public class NewBindDeviceActivity extends AppCompatActivity {
}
}
}
//jjia-push
private String device_mac;
private void openNotify(){
BleManager.getInstance().notify(currentDevice, SERVICE_UUID, WRITE_UUID, new BleNotifyCallback() {
@Override
public void onNotifySuccess() {
sendBleData();
}
@Override
public void onNotifyFailure(BleException exception) {
// dismissProgressDialogCancelble();
dismissDialog();
}
@Override
public void onCharacteristicChanged(byte[] data) {
if (data!=null && data.length>0){
int check_code = data[1];
int length = data[14];
byte[] dataByte = new byte[length];
for (int i = 0; i < dataByte.length; i++) {
dataByte[i] = data[i];
}
Object object = ModelCodec.deCode(dataByte,Commons.IoBuffer);
if (object!=null && object instanceof BackFunctionCode7_11){
BackFunctionCode7_11 model = (BackFunctionCode7_11) object;
String status = ByteUtil.toHex(model.getStatus());
device_mac = ByteUtil.bytesToHexString(model.getSrc());
dismissDialog();
if (!TextUtils.isEmpty(device_mac)){
showDialog("正在绑定设备...");
connectDevice.cancel();
connectDevice.start();
}
// checkoutMac(device_mac);
}
L.i("jjia-------check_code-"+check_code);
L.i("jjia-------length-"+length);
L.i("jjia-------device_mac-"+device_mac);
}
}
});
}
// private void openNotify(){
// BleManager.getInstance().notify(currentDevice, SERVICE_UUID, WRITE_UUID, new BleNotifyCallback() {
// @Override
// public void onNotifySuccess() {
// sendBleData();
// }
//
// @Override
// public void onNotifyFailure(BleException exception) {
//// dismissProgressDialogCancelble();
// dismissDialog();
// }
//
// @Override
// public void onCharacteristicChanged(byte[] data) {
//
// if (data!=null && data.length>0){
// int check_code = data[1];
// int length = data[14];
// byte[] dataByte = new byte[length];
// for (int i = 0; i < dataByte.length; i++) {
// dataByte[i] = data[i];
// }
//
// Object object = ModelCodec.deCode(dataByte,Commons.IoBuffer);
// if (object!=null && object instanceof BackFunctionCode7_11){
// BackFunctionCode7_11 model = (BackFunctionCode7_11) object;
// String status = ByteUtil.toHex(model.getStatus());
// device_mac = ByteUtil.bytesToHexString(model.getSrc());
//
//
// dismissDialog();
// if (!TextUtils.isEmpty(device_mac)){
// showDialog("正在绑定设备...");
// connectDevice.cancel();
// connectDevice.start();
// }
//// checkoutMac(device_mac);
// }
// L.i("jjia-------check_code-"+check_code);
// L.i("jjia-------length-"+length);
// L.i("jjia-------device_mac-"+device_mac);
// }
// }
// });
// }
int devicePosition = 0;
private void sendBleData(){
String ssid = tvWifiName.getText().toString();
String pwd = tvWifiPwd.getText().toString();
OrderDeviceConnectModel model = OrderModel.OrderDeviceConnectModel(ssid, pwd,true);//设置正式环境域名
byte[] data = ModelCodec.enCode(model, Commons.IoBuffer);
BleManager.getInstance().write(currentDevice, SERVICE_UUID, WRITE_UUID, data,false, new BleWriteCallback() {
@Override
public void onWriteSuccess(int current, int total, byte[] justWrite) {
L.i("jjia-------------ssid 发送");
}
@Override
public void onWriteFailure(BleException exception) {
}
});
}
private void toReset(){
ResetDeviceModel model = OrderModel.resetDevice();//设置正式环境域名
byte[] data = ModelCodec.enCode(model);
// data = new byte[1];
// QueryTempeSettingModel xx = OrderModel.OrderQueryTempeSettingModel(device_mac);
// byte[] data = ModelCodec.enCode(xx);
BleManager.getInstance().write(currentDevice, SERVICE_UUID, WRITE_UUID, data,false, new BleWriteCallback() {
@Override
public void onWriteSuccess(int current, int total, byte[] justWrite) {
L.i("jjia-------------重启 发送 成功-");
}
@Override
public void onWriteFailure(BleException exception) {
L.i("jjia-------------重启 发送 失败"+exception.toString());
}
});
}
//jjia-push
// private void sendBleData(){
//
// String ssid = tvWifiName.getText().toString();
// String pwd = tvWifiPwd.getText().toString();
//
// OrderDeviceConnectModel model = OrderModel.OrderDeviceConnectModel(ssid, pwd,true);//设置正式环境域名
// byte[] data = ModelCodec.enCode(model, Commons.IoBuffer);
// BleManager.getInstance().write(currentDevice, SERVICE_UUID, WRITE_UUID, data,false, new BleWriteCallback() {
// @Override
// public void onWriteSuccess(int current, int total, byte[] justWrite) {
//
// L.i("jjia-------------ssid 发送");
// }
//
// @Override
// public void onWriteFailure(BleException exception) {
//
// }
// });
// }
//jjia-push
// private void toReset(){
// ResetDeviceModel model = OrderModel.resetDevice();//设置正式环境域名
// byte[] data = ModelCodec.enCode(model);
//// data = new byte[1];
//
//// QueryTempeSettingModel xx = OrderModel.OrderQueryTempeSettingModel(device_mac);
//// byte[] data = ModelCodec.enCode(xx);
// BleManager.getInstance().write(currentDevice, SERVICE_UUID, WRITE_UUID, data,false, new BleWriteCallback() {
// @Override
// public void onWriteSuccess(int current, int total, byte[] justWrite) {
// L.i("jjia-------------重启 发送 成功-");
// }
//
// @Override
// public void onWriteFailure(BleException exception) {
// L.i("jjia-------------重启 发送 失败"+exception.toString());
// }
// });
// }
public static final String SERVICE_UUID = "000000ff-0000-1000-8000-00805f9b34fb"; //蓝牙通讯服务
public static final String READ_UUID = "0000ff01-0000-1000-8000-00805f9b34fb"; //读特征
public static final String WRITE_UUID = "0000ff01-0000-1000-8000-00805f9b34fb"; //写特征
private void connectBle(){
BleManager.getInstance().connect(currentDevice, new BleGattCallback() {
@Override
public void onStartConnect() {
showDialog("开始连接蓝牙设备");
}
@Override
public void onConnectFail(BleDevice bleDevice, BleException exception) {
ToastUtil.show(NewBindDeviceActivity.this,"连接蓝牙设备失败,请重试");
dismissDialog();
}
@Override
public void onConnectSuccess(BleDevice bleDevice, BluetoothGatt gatt, int status) {
// ToastUtil.show(NewBindDeviceActivity.this,"蓝牙连接成功");
// setMessage("蓝牙连接成功");
BleManager.getInstance().setMtu(bleDevice, 512, new BleMtuChangedCallback() {
@Override
public void onSetMTUFailure(BleException exception) {
L.i("jjia-------MTU--"+exception.toString());
dismissDialog();
}
@Override
public void onMtuChanged(int mtu) {
L.i("jjia-------MTU--"+mtu);
openNotify();
}
});
}
@Override
public void onDisConnected(boolean isActiveDisConnected, BleDevice device, BluetoothGatt gatt, int status) {
// ToastUtil.show(NewBindDeviceActivity.this,"连接断开了");
}
});
}
//jjia-push
// private void connectBle(){
// BleManager.getInstance().connect(currentDevice, new BleGattCallback() {
// @Override
// public void onStartConnect() {
// showDialog("开始连接蓝牙设备");
// }
//
// @Override
// public void onConnectFail(BleDevice bleDevice, BleException exception) {
// ToastUtil.show(NewBindDeviceActivity.this,"连接蓝牙设备失败,请重试");
// dismissDialog();
// }
//
// @Override
// public void onConnectSuccess(BleDevice bleDevice, BluetoothGatt gatt, int status) {
//// ToastUtil.show(NewBindDeviceActivity.this,"蓝牙连接成功");
//// setMessage("蓝牙连接成功");
// BleManager.getInstance().setMtu(bleDevice, 512, new BleMtuChangedCallback() {
// @Override
// public void onSetMTUFailure(BleException exception) {
// L.i("jjia-------MTU--"+exception.toString());
// dismissDialog();
// }
//
// @Override
// public void onMtuChanged(int mtu) {
// L.i("jjia-------MTU--"+mtu);
// openNotify();
// }
// });
// }
//
// @Override
// public void onDisConnected(boolean isActiveDisConnected, BleDevice device, BluetoothGatt gatt, int status) {
//// ToastUtil.show(NewBindDeviceActivity.this,"连接断开了");
// }
// });
// }
private Activity act;
private ConnectDevice connectDevice;
private boolean isContinue = true;
@ -784,7 +791,8 @@ public class NewBindDeviceActivity extends AppCompatActivity {
@Override
public int compareTo(Boolean available) {
if (available) {
toReset();
//jjia-push
// toReset();
isContinue = false;
connectDevice.cancel();
L.i("jjia-----------调用绑定接口---");
@ -1147,22 +1155,23 @@ public class NewBindDeviceActivity extends AppCompatActivity {
// myProgressDialogCancelble = null;
// }
// }
List<BleDevice> deviceList;
//jjia-push
// List<BleDevice> deviceList;
@SuppressLint("MissingPermission")
private void findConencted(){
deviceList = BleManager.getInstance().getAllConnectedDevice();
if (deviceList!=null && deviceList.size()>0){
for (BleDevice item:deviceList){
if (item!=null){
L.i("jjia-----------"+item.getDevice().getName());
}
}
}else {
L.i("jjia--------没有连接的蓝牙---");
}
//jjia-push
// deviceList = BleManager.getInstance().getAllConnectedDevice();
// if (deviceList!=null && deviceList.size()>0){
// for (BleDevice item:deviceList){
// if (item!=null){
// L.i("jjia-----------"+item.getDevice().getName());
// }
// }
//
// }else {
// L.i("jjia--------没有连接的蓝牙---");
// }
}
@Override

View File

@ -1,99 +1,99 @@
package com.ifish.airkiss;
import android.util.Log;
import com.ifish.utils.WifiUtil;
import com.lidroid.xutils.util.LogUtils;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetSocketAddress;
import java.net.SocketException;
import java.nio.charset.StandardCharsets;
/**
* @author:zau18
* @date: 2023/9/4 9:09 下午
* @description:
*/
// 创建一个接收器类
public class UDPReceiver extends Thread {
private static final int MAX_UDP_DATAGRAM_LEN = 15000;
private DatagramSocket mSocket;
private boolean mRunning;
private UdpCallback resultBack;
private WifiUtil wifiUtil;
public UDPReceiver(WifiUtil wifiUtil,UdpCallback resultBack) {
this.wifiUtil = wifiUtil;
this.resultBack = resultBack;
try {
if(mSocket != null){
mSocket.close();
mSocket.disconnect();
mSocket = null;
}
// 创建一个UDP套接字
mSocket = new DatagramSocket(null);
mSocket.bind(new InetSocketAddress(10000));
mSocket.setSoTimeout(1000 * 60);
} catch (SocketException e) {
e.printStackTrace();
}
}
@Override
public void run() {
mRunning = true;
byte[] buffer = new byte[MAX_UDP_DATAGRAM_LEN];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
while (mRunning) {
try {
LogUtils.d("LHD 开始接受");
// 接收UDP数据包
mSocket.receive(packet);
String ip3 = WifiUtil.intToIp(wifiUtil.getConnectIpAddress());
LogUtils.d("LHD 开始接受 = "+" ip3 = "+ip3);
// Log.e("LHD test9999999990","收到的udp包 ip=" + packet.getAddress().getHostAddress()+" ip3 = "+ip3);
// 处理接收到的数据
if(!packet.getAddress().getHostAddress().equals(WifiUtil.intToIp(wifiUtil.getConnectIpAddress()))){
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) {
e.printStackTrace();
handleErrorData(e.toString());
}
}
mSocket.close();
}
public void stopRunning() {
mRunning = false;
if(mSocket != null){
mSocket.close();
mSocket.disconnect();
}
}
private void handleData(String data) {
// 处理接收到的数据
if(resultBack != null){
resultBack.onReceive(data);
}
}
private void handleErrorData(String data) {
stopRunning();
// 处理接收到的数据
if(resultBack != null){
resultBack.onError(data);
}
}
}
//package com.ifish.airkiss;
//
//import android.util.Log;
//
//import com.ifish.utils.WifiUtil;
//import com.lidroid.xutils.util.LogUtils;
//
//import java.net.DatagramPacket;
//import java.net.DatagramSocket;
//import java.net.InetSocketAddress;
//import java.net.SocketException;
//import java.nio.charset.StandardCharsets;
//
///**
// * @author:zau18
// * @date: 2023/9/4 9:09 下午
// * @description:
// */
//// 创建一个接收器类
//public class UDPReceiver extends Thread {
// private static final int MAX_UDP_DATAGRAM_LEN = 15000;
// private DatagramSocket mSocket;
// private boolean mRunning;
// private UdpCallback resultBack;
// private WifiUtil wifiUtil;
//
// public UDPReceiver(WifiUtil wifiUtil,UdpCallback resultBack) {
// this.wifiUtil = wifiUtil;
// this.resultBack = resultBack;
// try {
// if(mSocket != null){
// mSocket.close();
// mSocket.disconnect();
// mSocket = null;
// }
// // 创建一个UDP套接字
// mSocket = new DatagramSocket(null);
// mSocket.bind(new InetSocketAddress(10000));
// mSocket.setSoTimeout(1000 * 60);
// } catch (SocketException e) {
// e.printStackTrace();
// }
// }
//
// @Override
// public void run() {
// mRunning = true;
// byte[] buffer = new byte[MAX_UDP_DATAGRAM_LEN];
// DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
//
// while (mRunning) {
// try {
// LogUtils.d("LHD 开始接受");
// // 接收UDP数据包
// mSocket.receive(packet);
// String ip3 = WifiUtil.intToIp(wifiUtil.getConnectIpAddress());
// LogUtils.d("LHD 开始接受 = "+" ip3 = "+ip3);
//// Log.e("LHD test9999999990","收到的udp包 ip=" + packet.getAddress().getHostAddress()+" ip3 = "+ip3);
// // 处理接收到的数据
// if(!packet.getAddress().getHostAddress().equals(WifiUtil.intToIp(wifiUtil.getConnectIpAddress()))){
// 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) {
// e.printStackTrace();
// handleErrorData(e.toString());
// }
// }
// mSocket.close();
// }
//
// public void stopRunning() {
// mRunning = false;
// if(mSocket != null){
// mSocket.close();
// mSocket.disconnect();
// }
// }
//
// private void handleData(String data) {
// // 处理接收到的数据
// if(resultBack != null){
// resultBack.onReceive(data);
// }
// }
//
// private void handleErrorData(String data) {
// stopRunning();
// // 处理接收到的数据
// if(resultBack != null){
// resultBack.onError(data);
// }
// }
//}

View File

@ -31,8 +31,8 @@ import com.alibaba.sdk.android.push.PushControlService;
import com.alibaba.sdk.android.push.huawei.HuaWeiRegister;
import com.alibaba.sdk.android.push.noonesdk.PushServiceFactory;
import com.alibaba.sdk.android.push.register.MiPushRegister;
import com.clj.fastble.BleManager;
import com.clj.fastble.scan.BleScanRuleConfig;
//import com.clj.fastble.BleManager;
//import com.clj.fastble.scan.BleScanRuleConfig;
import com.ifish.activity.BuildConfig;
import com.ifish.basebean.EventBean;
import com.ifish.utils.ActivityManager;
@ -100,18 +100,19 @@ public class BaseApplication extends MultiDexApplication {
//初始化MMKV
// KVUtil.init(this);
initPicasso();
BleManager.getInstance().init(this);
//jjia-push
// BleManager.getInstance().init(this);
UUID[] uuids = {UUID.fromString(SERVICE_UUID)};
BleScanRuleConfig scanRuleConfig = new BleScanRuleConfig.Builder()
.setServiceUuids(uuids) // 只扫描指定的服务的设备可选
// .setDeviceName(true, names) // 只扫描指定广播名的设备可选
// .setDeviceMac(mac) // 只扫描指定mac的设备可选
// .setAutoConnect(isAutoConnect) // 连接时的autoConnect参数可选默认false
.setScanTimeOut(30000) // 扫描超时时间30S可选默认10秒小于等于0表示不限制扫描时间
.build();
BleManager.getInstance().initScanRule(scanRuleConfig);
//jjia-push
// BleScanRuleConfig scanRuleConfig = new BleScanRuleConfig.Builder()
// .setServiceUuids(uuids) // 只扫描指定的服务的设备可选
//// .setDeviceName(true, names) // 只扫描指定广播名的设备可选
//// .setDeviceMac(mac) // 只扫描指定mac的设备可选
//// .setAutoConnect(isAutoConnect) // 连接时的autoConnect参数可选默认false
// .setScanTimeOut(30000) // 扫描超时时间30S可选默认10秒小于等于0表示不限制扫描时间
// .build();
// BleManager.getInstance().initScanRule(scanRuleConfig);
registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {

View File

@ -52,10 +52,11 @@ import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import com.bumptech.glide.Glide;
import com.clj.fastble.BleManager;
import com.clj.fastble.callback.BleScanCallback;
import com.clj.fastble.data.BleDevice;
import com.clj.fastble.data.BleScanState;
//jjia-push
//import com.clj.fastble.BleManager;
//import com.clj.fastble.callback.BleScanCallback;
//import com.clj.fastble.data.BleDevice;
//import com.clj.fastble.data.BleScanState;
import com.ifish.activity.BindTwoDeviceActivity;
import com.ifish.activity.DeviceInstructionActivity;
import com.ifish.activity.InformationListActivity;
@ -1867,41 +1868,42 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
}
firstResult = firstResult + HttpManager.PAGESIZE;
}
private void initBooth(){
boolean enable = BleManager.getInstance().isBlueEnable();
if (enable) {
BleManager.getInstance().scan(new BleScanCallback() {
@Override
public void onScanFinished(List<BleDevice> scanResultList) {
if (currentDevice!=null){ // 扫描结束有设备
L.i("jjjia-----------scan---");
showDevice();
}
}
@Override
public void onScanStarted(boolean success) {
}
@SuppressLint("MissingPermission")
@Override
public void onScanning(BleDevice bleDevice) {
if (bleDevice!=null && bleDevice.getDevice()!=null){
BluetoothDevice bean = bleDevice.getDevice();
if (!TextUtils.isEmpty(bean.getName()) && bean.getName().startsWith("ifish")){
currentDevice = bleDevice;
BleManager.getInstance().cancelScan();
}
L.i(bean.getName()+"jjia------mac---"+bean.getAddress());
}
}
});
}
}
BleDevice currentDevice;
//jjia-push
// private void initBooth(){
// boolean enable = BleManager.getInstance().isBlueEnable();
// if (enable) {
// BleManager.getInstance().scan(new BleScanCallback() {
// @Override
// public void onScanFinished(List<BleDevice> scanResultList) {
// if (currentDevice!=null){ // 扫描结束有设备
// L.i("jjjia-----------scan---");
// showDevice();
// }
// }
//
// @Override
// public void onScanStarted(boolean success) {
//
// }
//
// @SuppressLint("MissingPermission")
// @Override
// public void onScanning(BleDevice bleDevice) {
// if (bleDevice!=null && bleDevice.getDevice()!=null){
// BluetoothDevice bean = bleDevice.getDevice();
// if (!TextUtils.isEmpty(bean.getName()) && bean.getName().startsWith("ifish")){
// currentDevice = bleDevice;
// BleManager.getInstance().cancelScan();
// }
// L.i(bean.getName()+"jjia------mac---"+bean.getAddress());
// }
// }
// });
// }
//
// }
//jjia-push
// BleDevice currentDevice;
public void onEventMainThread(BluetoothDevice event) {
}
@ -1976,7 +1978,8 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
intent.setClass(requireActivity(), NewBindDeviceActivity.class);
intent.putExtra("title", "连接水族箱");
intent.putExtra("type", "bluetooth");
intent.putExtra("device", currentDevice);
//jjia-push
// intent.putExtra("device", currentDevice);
startActivity(intent);
AnimationUtil.finishAnimation(requireActivity());
});
@ -1995,21 +1998,22 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
@Override
public void onTick(long l) {
L.i("jjia-----dowmCount--"+dowmCount);
if (dowmCount%6==0){
BleScanState scanState = getScanState();
L.i("jjia-----------timer--"+scanState);
if (BleScanState.STATE_IDLE.equals(scanState)){
if (isShowIng){
L.i("jjia-----已经扫描到设备了,等待反馈-");
closeDownTimer();
}else {
initBooth();
L.i("jjia-----开始扫描-");
}
}else {
L.i("jjia----timer--上一次的扫描还在继续中-");
}
}
//jjia-push
// if (dowmCount%6==0){
// BleScanState scanState = getScanState();
// L.i("jjia-----------timer--"+scanState);
// if (BleScanState.STATE_IDLE.equals(scanState)){
// if (isShowIng){
// L.i("jjia-----已经扫描到设备了,等待反馈-");
// closeDownTimer();
// }else {
// initBooth();
// L.i("jjia-----开始扫描-");
// }
// }else {
// L.i("jjia----timer--上一次的扫描还在继续中-");
// }
// }
dowmCount++;
}
@ -2032,10 +2036,10 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
countDownTimer = null;
}
}
private BleScanState getScanState(){
return BleManager.getInstance().getScanSate();
}
//jjia-push
// private BleScanState getScanState(){
// return BleManager.getInstance().getScanSate();
// }
@Override
public void onPause() {
@ -2045,13 +2049,14 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
private void oonPause(){
closeDownTimer();
BleScanState scanState = getScanState();
if (BleScanState.STATE_SCANNING.equals(scanState)) {
BleManager.getInstance().cancelScan();
L.i("jjia---扫描暂停----------");
} else {
}
L.i("jjia---扫描暂停-"+scanState);
//jjia-push
// BleScanState scanState = getScanState();
// if (BleScanState.STATE_SCANNING.equals(scanState)) {
// BleManager.getInstance().cancelScan();
// L.i("jjia---扫描暂停----------");
// } else {
//
// }
// L.i("jjia---扫描暂停-"+scanState);
}
}

View File

@ -33,7 +33,8 @@ import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.clj.fastble.BleManager;
//jjia-push
//import com.clj.fastble.BleManager;
import com.ifish.activity.AboutActivity;
import com.ifish.activity.BindTwoDeviceActivity;
import com.ifish.activity.CaptureActivity;