This commit is contained in:
jia 2025-01-06 22:12:40 +08:00
parent 458a80bc00
commit 2664e9cf76
3 changed files with 265 additions and 112 deletions

View File

@ -28,6 +28,7 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.RequiresPermission;
import androidx.appcompat.app.AppCompatActivity;
//jjia-xpush
import com.clj.fastble.BleManager;
@ -58,6 +59,7 @@ import com.ifish.activity.MainThree1CControlActivity;
import com.ifish.activity.MainThreeControlActivity;
import com.ifish.activity.MainTwoControlActivity;
import com.ifish.activity.MainZeroControlActivity;
import com.ifish.activity.MineActivity;
import com.ifish.activity.R;
import com.ifish.activity.WebViewActivity;
import com.ifish.basebean.BaseBean;
@ -65,6 +67,7 @@ import com.ifish.basebean.ConnectMessageEvent;
import com.ifish.basebean.Device;
import com.ifish.basebean.EventBean;
import com.ifish.baseclass.BaseGradeActivity;
import com.ifish.permission.PermissionHelper;
import com.ifish.tcp.BackFunctionCode7_11;
import com.ifish.tcp.ModelCodec;
import com.ifish.tcp.OrderDeviceConnectModel;
@ -73,6 +76,7 @@ import com.ifish.tcp.ResetDeviceModel;
import com.ifish.utils.ActivityManager;
import com.ifish.utils.AnimationUtil;
import com.ifish.utils.AppRoute;
import com.ifish.utils.AppUtil;
import com.ifish.utils.BlueToothUtil;
import com.ifish.utils.ByteUtil;
import com.ifish.utils.ClickUtil;
@ -83,6 +87,7 @@ import com.ifish.utils.L;
import com.ifish.utils.SPUtil;
import com.ifish.utils.ToastUtil;
import com.ifish.utils.WifiAdmin;
import com.ifish.view.IosAlertDialog;
import com.lidroid.xutils.util.LogUtils;
import java.io.BufferedReader;
@ -130,12 +135,15 @@ public class NewBindDeviceActivity extends AppCompatActivity {
private Dialog waterTempDialog;
String type = null;
private Activity activity;
private PermissionHelper permissionHelper;
String[] permission;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_new_bind_device_choice);
activity = this;
permission = AppUtil.getBluePermissionList();
permissionHelper = new PermissionHelper(this, permission, 250);
ActivityManager.getInstance().addActivity(this);
sp=SPUtil.getInstance(this);
@ -470,43 +478,14 @@ public class NewBindDeviceActivity extends AppCompatActivity {
break;
case BlueTooth:
//jjia-xpush
boolean support = BleManager.getInstance().isSupportBle();
if (!support){
ToastUtil.show(NewBindDeviceActivity.this,"当前设备不支持低功耗蓝牙");
if (permissionHelper.checkSelfPermission(permission)) {
blueClick();
} 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();
}
showPermissionHint();
}
break;
case APConnect:
//开始AP连接
@ -520,6 +499,124 @@ public class NewBindDeviceActivity extends AppCompatActivity {
break;
}
}
private void showPermissionHint(){
IosAlertDialog dialog = new IosAlertDialog(this).builder();
dialog.setCancelable(false);
dialog.setTitle("权限申请理由");
dialog.setMessage("蓝牙联网需要app获取手机的蓝牙扫描权限才能进行蓝牙扫描是否允许申请蓝牙扫描相关权限");
dialog.setNegativeButton("拒绝", view -> {
});
dialog.setPositiveButton("申请", view ->
{
getPermission();
});
dialog.show();
}
private void getPermission() {
permissionHelper.request(new PermissionHelper.PermissionCallback() {
@Override
public void onPermissionGranted() {
blueClick();
}
@Override
public void onIndividualPermissionGranted(String[] grantedPermission) {
AlertDialog.Builder dialog = new AlertDialog.Builder(NewBindDeviceActivity.this);
dialog.setCancelable(false);
dialog.setMessage("蓝牙联网请先同意app获取蓝牙相关权限");
dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(
DialogInterface dialog,
int which) {
}
});
dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.show();
}
@Override
public void onPermissionDenied() {
AlertDialog.Builder dialog = new AlertDialog.Builder(NewBindDeviceActivity.this);
dialog.setCancelable(false);
dialog.setMessage("蓝牙联网请先同意app获取蓝牙相关权限");
dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(
DialogInterface dialog,
int which) {
getPermission();
}
});
dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
dialog.show();
}
@Override
public void onPermissionDeniedBySystem() {
AlertDialog.Builder dialog = new AlertDialog.Builder(NewBindDeviceActivity.this);
dialog.setCancelable(false);
dialog.setTitle("温馨提示");
dialog.setMessage("蓝牙联网,请到应用信息页面-权限管理-打开蓝牙权限");
dialog.setPositiveButton("去开启", (dialog1, which) -> {
AppUtil.toAuthority(NewBindDeviceActivity.this);
});
dialog.setNegativeButton("取消", (dialog12, which) -> {
});
dialog.show();
}
});
}
private void blueClick(){
//jjia-xpush
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-xpush
private void blueScan(){
BleManager.getInstance().scan(new BleScanCallback() {
@ -698,19 +795,19 @@ public class NewBindDeviceActivity extends AppCompatActivity {
@Override
public void onWriteSuccess(int current, int total, byte[] justWrite) {
L.i("jjia-------------ssid 发送");
L.i("jjia-------------ssid 发送ok");
}
@Override
public void onWriteFailure(BleException exception) {
L.i("jjia-------------发送-失败"+exception.toString());
}
});
}
//jjia-xpush
private void toReset(){
ResetDeviceModel model = OrderModel.resetDevice();//设置正式环境域名
byte[] data = ModelCodec.enCode(model);
byte[] data = ModelCodec.enCode(model,Commons.IoBuffer);
// data = new byte[1];
// QueryTempeSettingModel xx = OrderModel.OrderQueryTempeSettingModel(device_mac);
@ -733,11 +830,20 @@ public class NewBindDeviceActivity extends AppCompatActivity {
public static final String READ_UUID = "0000ff01-0000-1000-8000-00805f9b34fb"; //读特征
public static final String WRITE_UUID = "0000ff01-0000-1000-8000-00805f9b34fb"; //写特征
// 全局gatt
private BluetoothGatt mGatt;
//jjia-xpush
private void connectBle(){
BleManager.getInstance().connect(currentDevice, new BleGattCallback() {
@RequiresPermission(Manifest.permission.BLUETOOTH_CONNECT)
@Override
public void onStartConnect() {
if (mGatt!=null){
mGatt.disconnect();
mGatt.close();
mGatt = null;
}
showDialog("开始连接蓝牙设备");
}
@ -751,6 +857,8 @@ public class NewBindDeviceActivity extends AppCompatActivity {
public void onConnectSuccess(BleDevice bleDevice, BluetoothGatt gatt, int status) {
// ToastUtil.show(NewBindDeviceActivity.this,"蓝牙连接成功");
// setMessage("蓝牙连接成功");
mGatt = gatt;
BleManager.getInstance().setMtu(bleDevice, 512, new BleMtuChangedCallback() {
@Override
public void onSetMTUFailure(BleException exception) {
@ -1181,6 +1289,10 @@ public class NewBindDeviceActivity extends AppCompatActivity {
L.i(requestCode+"jjia--------result-1--"+requestCode);
if (101== requestCode && 0==resultCode){
checkNet();
}else if(250==requestCode){
if (permissionHelper.checkSelfPermission(permission)) {
blueClick();
}
}
}
private void showDialog(String msg){

View File

@ -9,6 +9,7 @@ package com.ifish.fragment;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
@ -22,6 +23,7 @@ import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
@ -50,6 +52,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.bumptech.glide.Glide;
//jjia-xpush
@ -193,6 +196,7 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
private PermissionHelper permissionHelper;
String[] permission;
String[] permission_blue;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
@ -215,8 +219,10 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
initInformation();
permission = new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION};
permission_blue = AppUtil.getBluePermissionList();
permissionHelper = new PermissionHelper(DeviceFragment.this, permission, 250);
// initBooth();
initBooth();
boolean notificationsEnabled = PushManager.getInstance().areNotificationsEnabled(requireActivity());
if (!notificationsEnabled){
toOpenNotifications();
@ -270,9 +276,6 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
@Override
public void onPermissionGranted() {
Intent intent = new Intent();
intent.setClass(getActivity(), BindTwoDeviceActivity.class);
startActivity(intent);
@ -1911,37 +1914,38 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
}
//jjia-xpush
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();
if (AppUtil.checkSelfPermission(getContext(),permission_blue)) {
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();
}
L.i(bean.getName()+"jjia------mac---"+bean.getAddress());
}
}
});
}
@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-xpush
BleDevice currentDevice;
@ -1964,10 +1968,11 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
if (!isShowIng){
currentDevice = null;
}
BleManager.getInstance().cancelScan();
}else
if (AppUtil.checkSelfPermission(getContext(),permission_blue)) {
BleManager.getInstance().cancelScan();
}
if (EventBean.TAB_INDEX.equals(eventBean.name)){
}else if (EventBean.TAB_INDEX.equals(eventBean.name)){
currentIndex = eventBean.index;
L.i("jjia-----tab_index--"+eventBean.index);
if (currentIndex == 0){
@ -2039,42 +2044,43 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
CountDownTimer countDownTimer;
private void startDownTimer(){
closeDownTimer();
if (!isShowIng && currentIndex == 0){
dowmCount = 1;
countDownTimer = new CountDownTimer(2000000000,1000) {
@Override
public void onTick(long l) {
L.i("jjia-----dowmCount--"+dowmCount);
//jjia-xpush
if (dowmCount%6==0){
BleScanState scanState = getScanState();
L.i("jjia-----------timer--"+scanState);
if (BleScanState.STATE_IDLE.equals(scanState)){
if (isShowIng){
L.i("jjia-----已经扫描到设备了,等待反馈-");
closeDownTimer();
if (AppUtil.checkSelfPermission(getContext(),permission_blue)) {
if (!isShowIng && currentIndex == 0){
dowmCount = 1;
countDownTimer = new CountDownTimer(2000000000,1000) {
@Override
public void onTick(long l) {
L.i("jjia-----dowmCount--"+dowmCount);
//jjia-xpush
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 {
initBooth();
L.i("jjia-----开始扫描-");
L.i("jjia----timer--上一次的扫描还在继续中-");
}
}else {
L.i("jjia----timer--上一次的扫描还在继续中-");
}
dowmCount++;
}
dowmCount++;
}
@Override
public void onFinish() {
L.i("jjia---倒计时完成----------");
}
};
countDownTimer.start();
}else {
L.i("jjia----timer--已扫描到设备,暂不执行倒计时-");
@Override
public void onFinish() {
L.i("jjia---倒计时完成----------");
}
};
countDownTimer.start();
}else {
L.i("jjia----timer--已扫描到设备,暂不执行倒计时-");
}
}
}
private void closeDownTimer(){
@ -2087,7 +2093,6 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
private BleScanState getScanState(){
return BleManager.getInstance().getScanSate();
}
@Override
public void onPause() {
super.onPause();
@ -2096,14 +2101,19 @@ public class DeviceFragment extends BaseV4Fragment implements ObservableScrollVi
private void oonPause(){
closeDownTimer();
//jjia-xpush
BleScanState scanState = getScanState();
if (BleScanState.STATE_SCANNING.equals(scanState)) {
BleManager.getInstance().cancelScan();
L.i("jjia---扫描暂停----------");
} else {
if (AppUtil.checkSelfPermission(getContext(),permission_blue)) {
//jjia-xpush
BleScanState scanState = getScanState();
if (BleScanState.STATE_SCANNING.equals(scanState)) {
BleManager.getInstance().cancelScan();
L.i("jjia---扫描暂停----------");
} else {
}
L.i("jjia---扫描暂停-"+scanState);
}
L.i("jjia---扫描暂停-"+scanState);
}
}

View File

@ -6,6 +6,7 @@ import android.bluetooth.BluetoothManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.text.TextUtils;
@ -14,6 +15,7 @@ import android.widget.ImageView;
import androidx.activity.ComponentActivity;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import com.ifish.activity.R;
import com.squareup.picasso.Picasso;
@ -258,7 +260,14 @@ public class AppUtil {
return false;
}
}
public static boolean checkSelfPermission(Context context ,String[] permissions) {
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
public static String [] getImagePermissionList(){
List<String> perList = new ArrayList<>();
@ -282,6 +291,28 @@ public class AppUtil {
return permissions;
}
public static String [] getBluePermissionList(){
List<String> perList = new ArrayList<>();
perList.add(android.Manifest.permission.BLUETOOTH);
perList.add(android.Manifest.permission.ACCESS_FINE_LOCATION);
perList.add(android.Manifest.permission.ACCESS_COARSE_LOCATION);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){
perList.add(android.Manifest.permission.BLUETOOTH_SCAN);
perList.add(android.Manifest.permission.BLUETOOTH_ADVERTISE);
perList.add(android.Manifest.permission.BLUETOOTH_CONNECT);
}else {
}
int size = perList.size();
String [] permissions = new String[size];
for (int i = 0;i<size;i++){
permissions[i] = perList.get(i);
}
return permissions;
}
public static void setHeader(Activity activity,ImageView header,String weixin){
String userImg = Commons.USER.getUserImg();
if (!TextUtils.isEmpty(userImg)){