From 464bcfa2bf09358c5057b095f20647815598604e Mon Sep 17 00:00:00 2001 From: wangh <123456> Date: Thu, 25 Jul 2024 14:34:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=20=E6=89=8B=E5=8A=A8?= =?UTF-8?q?=E5=9C=B0=E6=A0=87=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 1 + app/libs/RflyBlue-1.0.0.aar | Bin 0 -> 49885 bytes app/src/main/AndroidManifest.xml | 14 ++ .../example/bgsrfidtrack/BindingActivity.java | 2 + .../bgsrfidtrack/BindingDBActivity.java | 76 ++++++ .../bgsrfidtrack/HomePageActivity.java | 11 +- .../example/bgsrfidtrack/MainActivity.java | 17 ++ .../example/bgsrfidtrack/RflyActivity.java | 231 ++++++++++++++++++ .../bgsrfidtrack/UnBindingActivity.java | 80 +++++- .../adapter/UnBindingGoodsInfoAdapter.java | 2 +- .../bgsrfidtrack/base/BaseActivity.java | 2 +- .../bgsrfidtrack/model/BindingModel.java | 10 + .../main/res/layout/activity_binding_db.xml | 75 ++++++ .../main/res/layout/activity_home_page.xml | 38 ++- app/src/main/res/layout/activity_main.xml | 30 ++- app/src/main/res/layout/activity_main1.xml | 116 +++++++++ app/src/main/res/layout/activity_rfly.xml | 130 ++++++++++ app/src/main/res/mipmap-xhdpi/icon_in.png | Bin 0 -> 2351 bytes .../main/res/mipmap-xhdpi/icon_jiaojie.png | Bin 0 -> 2667 bytes app/src/main/res/mipmap-xhdpi/icon_unbind.png | Bin 0 -> 1572 bytes app/src/main/res/values/themes.xml | 6 + 21 files changed, 825 insertions(+), 16 deletions(-) create mode 100644 app/libs/RflyBlue-1.0.0.aar create mode 100644 app/src/main/java/com/example/bgsrfidtrack/BindingDBActivity.java create mode 100644 app/src/main/java/com/example/bgsrfidtrack/RflyActivity.java create mode 100644 app/src/main/res/layout/activity_binding_db.xml create mode 100644 app/src/main/res/layout/activity_main1.xml create mode 100644 app/src/main/res/layout/activity_rfly.xml create mode 100644 app/src/main/res/mipmap-xhdpi/icon_in.png create mode 100644 app/src/main/res/mipmap-xhdpi/icon_jiaojie.png create mode 100644 app/src/main/res/mipmap-xhdpi/icon_unbind.png diff --git a/app/build.gradle b/app/build.gradle index da4fcd4..a49a3f4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -39,6 +39,7 @@ dependencies { implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation files('libs\\SerialPort.jar') implementation files('libs\\uhfcom13_v15.jar') + implementation files('libs\\RflyBlue-1.0.0.aar') testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.5' androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' diff --git a/app/libs/RflyBlue-1.0.0.aar b/app/libs/RflyBlue-1.0.0.aar new file mode 100644 index 0000000000000000000000000000000000000000..1112268ec43024a29c932837e60b0231b169cfbe GIT binary patch literal 49885 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 + + + + + + + + + + diff --git a/app/src/main/java/com/example/bgsrfidtrack/BindingActivity.java b/app/src/main/java/com/example/bgsrfidtrack/BindingActivity.java index 9e1667b..f0173a5 100644 --- a/app/src/main/java/com/example/bgsrfidtrack/BindingActivity.java +++ b/app/src/main/java/com/example/bgsrfidtrack/BindingActivity.java @@ -82,6 +82,8 @@ public class BindingActivity extends BaseActivity implements MyKeyInfoCall, Adap // 提交 public void bindingSubmit(View view) { model.setWatBills(codeList); + + model.setUser(SharedPreferencesUtils.getstring("user","")); OkGo.post("http://"+ SharedPreferencesUtils.getstring("ip","")+ "/api/bindingSubmit") .upRequestBody(RequestBody.create(JSON, gson.toJson(model))) diff --git a/app/src/main/java/com/example/bgsrfidtrack/BindingDBActivity.java b/app/src/main/java/com/example/bgsrfidtrack/BindingDBActivity.java new file mode 100644 index 0000000..eacb5aa --- /dev/null +++ b/app/src/main/java/com/example/bgsrfidtrack/BindingDBActivity.java @@ -0,0 +1,76 @@ +package com.example.bgsrfidtrack; + +import android.os.Bundle; +import android.view.View; +import android.widget.Toast; + +import androidx.databinding.DataBindingUtil; + +import com.example.bgsrfidtrack.base.BaseActivity; +import com.example.bgsrfidtrack.base.MyRecultCall; +import com.example.bgsrfidtrack.base.MyResult; +import com.example.bgsrfidtrack.base.SharedPreferencesUtils; +import com.example.bgsrfidtrack.databinding.ActivityBindingDbBinding; +import com.example.bgsrfidtrack.receiver.MyKeyInfoCall; +import com.lzy.okgo.OkGo; +import com.lzy.okgo.model.Response; + +public class BindingDBActivity extends BaseActivity implements MyKeyInfoCall { + private ActivityBindingDbBinding binding; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = DataBindingUtil.setContentView(this, R.layout.activity_binding_db); + initRFID(); + initKeyRecriver(this); + } + + public void binddingDbClear1(View view) { + binding.hkEpc.setText(null); + } + + public void binddingDbClear2(View view) { + binding.dbEpc.setText(null); + } + + public void bindingDbSubmit(View view) { + var hkEpcCode = binding.hkEpc.getText().toString(); + var dbEpcCode = binding.dbEpc.getText().toString(); + if (hkEpcCode.isEmpty() || dbEpcCode.isEmpty()) { + return; + } + OkGo.post("http://" + + SharedPreferencesUtils.getstring("ip", "") + + "/api/blueToothSubmit") + .params("locationCode", dbEpcCode) + .params("hkCode", hkEpcCode) + .execute(new MyRecultCall(dialog, this) { + @Override + public void onSuccess(Response response) { + super.onSuccess(response); + if (response.body().getCode() == 0) { + binding.hkEpc.setText(null); + binding.dbEpc.setText(null); + } + Toast.makeText(context, response.body().getMsg(), Toast.LENGTH_SHORT).show(); + } + }); + + } + + @Override + public void onkeyDown() { + readEPC(); + } + + @Override + public void sanEpcCall(String epc) { + super.sanEpcCall(epc); + if (binding.hkEpc.getText().toString().isEmpty()) { + binding.hkEpc.setText(epc); + } else { + binding.dbEpc.setText(epc); + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/bgsrfidtrack/HomePageActivity.java b/app/src/main/java/com/example/bgsrfidtrack/HomePageActivity.java index e1c25a3..33f2955 100644 --- a/app/src/main/java/com/example/bgsrfidtrack/HomePageActivity.java +++ b/app/src/main/java/com/example/bgsrfidtrack/HomePageActivity.java @@ -19,13 +19,20 @@ public class HomePageActivity extends BaseActivity { ActivityHomePageBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_home_page); Intent intent = new Intent(this, BindingActivity.class); Intent intent2 = new Intent(this, UnBindingActivity.class); - binding.binding.setOnClickListener(v -> { + Intent intent3 = new Intent(this, BindingDBActivity.class); + Intent intent4 = new Intent(this, UnBindingActivity.class); + binding.homeIn.setOnClickListener(v -> { startActivity(intent); }); binding.unBinding.setOnClickListener(v -> { startActivity(intent2); }); - + binding.binding.setOnClickListener(v -> { + startActivity(intent3); + }); + binding.homeJiaojie.setOnClickListener(v -> { + startActivity(intent4); + }); } diff --git a/app/src/main/java/com/example/bgsrfidtrack/MainActivity.java b/app/src/main/java/com/example/bgsrfidtrack/MainActivity.java index 07e571c..7b7a115 100644 --- a/app/src/main/java/com/example/bgsrfidtrack/MainActivity.java +++ b/app/src/main/java/com/example/bgsrfidtrack/MainActivity.java @@ -2,16 +2,21 @@ package com.example.bgsrfidtrack; import androidx.appcompat.app.AppCompatActivity; import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableBoolean; +import android.content.Context; import android.content.Intent; import android.os.Bundle; +import android.util.DisplayMetrics; import android.util.Log; import android.view.View; +import android.view.WindowManager; import com.example.bgsrfidtrack.base.BaseActivity; import com.example.bgsrfidtrack.base.MyRecultCall; import com.example.bgsrfidtrack.base.MyResult; import com.example.bgsrfidtrack.base.SharedPreferencesUtils; +import com.example.bgsrfidtrack.databinding.ActivityMain1Binding; import com.example.bgsrfidtrack.databinding.ActivityMainBinding; import com.example.bgsrfidtrack.model.LoginModel; import com.lzy.okgo.OkGo; @@ -21,12 +26,18 @@ import okhttp3.RequestBody; public class MainActivity extends BaseActivity { private LoginModel login; + private ObservableBoolean configState; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main); + // ActivityMain1Binding binding = DataBindingUtil.setContentView(this, R.layout.activity_main1); login = new LoginModel(); + configState=new ObservableBoolean(); + configState.set(true); + binding.setConfigState(configState); boolean isRemember = SharedPreferencesUtils.getboolean("isRemember", false); if (isRemember) { login.setUsername(SharedPreferencesUtils.getstring("user", "")); @@ -58,11 +69,17 @@ public class MainActivity extends BaseActivity { SharedPreferencesUtils.putstring("pass", pass); SharedPreferencesUtils.putstring("ip", ip); } + Intent intent = new Intent(MainActivity.this, HomePageActivity.class); + // Intent intent = new Intent(MainActivity.this, RflyActivity.class); startActivity(intent); finish(); } } }); } + // 改变配置ip栏显示 + public void loginConfigChange(View view){ + configState.set(!configState.get()); + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/bgsrfidtrack/RflyActivity.java b/app/src/main/java/com/example/bgsrfidtrack/RflyActivity.java new file mode 100644 index 0000000..2e119ec --- /dev/null +++ b/app/src/main/java/com/example/bgsrfidtrack/RflyActivity.java @@ -0,0 +1,231 @@ +package com.example.bgsrfidtrack; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; +import androidx.databinding.DataBindingUtil; +import androidx.databinding.ObservableBoolean; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.bluetooth.BluetoothAdapter; +import android.bluetooth.BluetoothDevice; +import android.content.pm.PackageManager; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; +import android.view.View; +import android.widget.Toast; + +import com.Rfly.bluereader.ReaderDevice.Rfly; +import com.Rfly.bluereader.exception.ReaderException; +import com.Rfly.bluereader.type.EpcBean; +import com.example.bgsrfidtrack.adapter.AdapterClickCall; +import com.example.bgsrfidtrack.adapter.GoodsInfoAdapter; +import com.example.bgsrfidtrack.base.BaseActivity; +import com.example.bgsrfidtrack.base.MyRecultCall; +import com.example.bgsrfidtrack.base.MyResult; +import com.example.bgsrfidtrack.base.SharedPreferencesUtils; +import com.example.bgsrfidtrack.databinding.ActivityRflyBinding; +import com.example.bgsrfidtrack.uitls.ASCIIUtil; +import com.lzy.okgo.OkGo; +import com.lzy.okgo.model.Response; + +import java.util.ArrayList; +import java.util.List; +import java.util.Set; + +public class RflyActivity extends BaseActivity implements Rfly.ConnectCallback, Rfly.ReadTagDataCallback { + private Rfly hbtReader; + private ObservableBoolean state; + private ActivityRflyBinding binding; + private List tagList; + private GoodsInfoAdapter adapter1; + private List list1; + private List listVis; + private GoodsInfoAdapter adapter2; + private List list2; + + @SuppressLint("MissingPermission") + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + binding = DataBindingUtil.setContentView(this, R.layout.activity_rfly); + checkPermissions(); + state = new ObservableBoolean(); + state.set(true); + binding.setState(state); + // 初始化 + hbtReader = new Rfly(this); + tagList = new ArrayList<>(); + // 注册蓝牙扫描 + hbtReader.setDeviceCallback(new Rfly.DeviceCallback() { + @Override + public void DeviceCallback(BluetoothDevice bluetoothDevice, String s) { + if (bluetoothDevice != null) { + if (bluetoothDevice.getBondState() == BluetoothDevice.BOND_BONDED && bluetoothDevice.getName() != null && + bluetoothDevice.getName().equals("RFly-IV166-837248")) { + hbtReader.connect(bluetoothDevice, RflyActivity.this); + + }else { + Toast.makeText(context, "扫描不到设备", Toast.LENGTH_SHORT).show(); + } + }else { + Toast.makeText(context, "蓝牙扫描失败", Toast.LENGTH_SHORT).show(); + } + } + }); + hbtReader.setreadTagDataCallback(this); + try { + // 开始扫描 + dialog.show(); + hbtReader.searchDevice(); + } catch (ReaderException e) { + throw new RuntimeException(e); + } + adapter1 = new GoodsInfoAdapter(this, new AdapterClickCall() { + @Override + public void deleteItem(int index) { + list1.remove(index); + listVis.remove(index); + adapter1.notifyDataSetChanged(); + } + }); + list1 = new ArrayList<>(); + listVis = new ArrayList<>(); + adapter1.setList(listVis); + binding.setAdapter1(adapter1); + adapter2 = new GoodsInfoAdapter(this, new AdapterClickCall() { + @Override + public void deleteItem(int index) { + list2.remove(index); + adapter2.notifyDataSetChanged(); + } + }); + list2 = new ArrayList<>(); + adapter2.setList(list2); + binding.setAdapter2(adapter2); + } + + // 返回RFID + @Override + public void ReadTagDataCallback(EpcBean epcBean) { + var strepc = epcBean.strepc; + if (tagList.contains(strepc)) { + return; + } + tagList.add(strepc); + Log.e("TAG", "ReadTagDataCallback1:" + strepc); + strepc = ASCIIUtil.hex2Str(strepc); + Log.e("TAG", "ReadTagDataCallback2:" + strepc); + Message message = new Message(); + message.obj = strepc; + handler.sendMessage(message); + + } + + private Handler handler = new Handler() { + @Override + public void handleMessage(@NonNull Message msg) { + super.handleMessage(msg); + var str = msg.obj.toString(); + if (str.contains("DB")) { + // 地标 + list2.add(str); + adapter2.notifyDataSetChanged(); + } else if (str.contains("HK")) { + list1.add(str); + var length = str.length(); + listVis.add(str.substring(length -4,length)); + adapter1.notifyDataSetChanged(); + } + } + }; + + // 读取按钮 + public void blueToothSanRFID(View view) { + try { + if (state.get()) { + hbtReader.ScanTags(); + state.set(false); + } else { + hbtReader.StopScan(); + state.set(true); + } + } catch (ReaderException e) { + e.printStackTrace(); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + try { + hbtReader.disconnect(); + } catch (ReaderException e) { + throw new RuntimeException(e); + } + hbtReader.destroy(); + } + + @Override + public void ConnectCallback(boolean b) { + Log.e("TAG", "连接状态:" + b); + dialog.dismiss(); + if (b) { + Toast.makeText(context, "连接成功", Toast.LENGTH_SHORT).show(); + return; + } + Toast.makeText(context, "蓝牙没有配对", Toast.LENGTH_SHORT).show(); + } + + + /** + * 权限检测,并请求权限 + */ + private void checkPermissions() { + String[] permissions = {android.Manifest.permission.BLUETOOTH_SCAN, android.Manifest.permission.BLUETOOTH_ADVERTISE, android.Manifest.permission.BLUETOOTH_CONNECT, android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.BLUETOOTH}; + + // List permissionsToRequest = new ArrayList<>(); + + // for (String permission : permissions) { + // if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) { + // permissionsToRequest.add(permission); + // } + // } + + // if (!permissionsToRequest.isEmpty()) { + ActivityCompat.requestPermissions(this, permissions, 1); + // } + } + + // 提交 + public void blueToothSubmit(View view) { + if (!state.get()){ + Toast.makeText(context, "先停止读取RFID", Toast.LENGTH_SHORT).show(); + return; + } + if (list1.isEmpty()||list2.isEmpty()) return; + OkGo.post("http://"+ SharedPreferencesUtils.getstring("ip","") +"/api/blueToothSubmit") + .params("locationCode", list2.get(0)) + .params("hkCode", list1.get(0)) + .execute(new MyRecultCall(dialog, this) { + @Override + public void onSuccess(Response response) { + super.onSuccess(response); + if (response.body().getCode()==0){ + tagList.clear(); + list1.clear(); + listVis.clear(); + list2.clear(); + adapter1.notifyDataSetChanged(); + adapter2.notifyDataSetChanged(); + } + Toast.makeText(RflyActivity.this, response.body().getMsg(), Toast.LENGTH_SHORT).show(); + } + }); + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/bgsrfidtrack/UnBindingActivity.java b/app/src/main/java/com/example/bgsrfidtrack/UnBindingActivity.java index 12a4ec6..a3a25b1 100644 --- a/app/src/main/java/com/example/bgsrfidtrack/UnBindingActivity.java +++ b/app/src/main/java/com/example/bgsrfidtrack/UnBindingActivity.java @@ -6,29 +6,60 @@ import androidx.databinding.DataBindingUtil; import android.os.Bundle; import android.util.Log; import android.view.View; +import android.widget.Toast; +import com.example.bgsrfidtrack.adapter.AdapterClickCall; import com.example.bgsrfidtrack.adapter.UnBindingGoodsInfoAdapter; import com.example.bgsrfidtrack.base.BaseActivity; +import com.example.bgsrfidtrack.base.MyRecultCall; +import com.example.bgsrfidtrack.base.MyResult; +import com.example.bgsrfidtrack.base.SharedPreferencesUtils; import com.example.bgsrfidtrack.databinding.ActivityUnBindingBinding; import com.example.bgsrfidtrack.receiver.MyKeyInfoCall; import com.example.bgsrfidtrack.uitls.ASCIIUtil; +import com.google.gson.reflect.TypeToken; +import com.lzy.okgo.OkGo; +import com.lzy.okgo.model.Response; + +import java.util.List; import cn.pda.serialport.Tools; -public class UnBindingActivity extends BaseActivity implements MyKeyInfoCall { +public class UnBindingActivity extends BaseActivity implements MyKeyInfoCall, AdapterClickCall { private UnBindingGoodsInfoAdapter adapter; private ActivityUnBindingBinding binding; + private List list; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_un_binding); initRFID(); initKeyRecriver(this); + adapter = new UnBindingGoodsInfoAdapter(this, this); + binding.setAdapter(adapter); } + // 删除全部 public void unBindingSubmit(View view) { + OkGo.post("http://" + SharedPreferencesUtils.getstring("ip", "") + + "/api/deleteBindingList") + .params("epc", binding.unbindingEpc.getText().toString()) + .execute(new MyRecultCall(dialog, this) { + @Override + public void onSuccess(Response response) { + super.onSuccess(response); + var body = response.body(); + if (body.getCode() == 0) { + list.clear(); + adapter.notifyDataSetChanged(); + } + Toast.makeText(UnBindingActivity.this, body.getMsg(), Toast.LENGTH_SHORT).show(); + } + }); } + // 扫描RFID @Override public void onkeyDown() { @@ -39,5 +70,52 @@ public class UnBindingActivity extends BaseActivity implements MyKeyInfoCall { public void sanEpcCall(String epc) { super.sanEpcCall(epc); binding.unbindingEpc.setText(epc); + OkGo.post("http://" + SharedPreferencesUtils.getstring("ip", "") + + "/api/findBindingList") + .params("epc", epc) + .execute(new MyRecultCall(dialog, this) { + @Override + public void onSuccess(Response response) { + super.onSuccess(response); + var body = response.body(); + if (body.getCode() == 0) { + + list = gson.fromJson(body.getData().toString(), new TypeToken>() { + }.getType()); + adapter.setList(list); + adapter.notifyDataSetChanged(); + }else { + if (list!=null){ + list.clear(); + adapter.notifyDataSetChanged(); + } + } + Toast.makeText(UnBindingActivity.this, body.getMsg(), Toast.LENGTH_SHORT).show(); + } + }); } + + @Override + public void deleteItem(int index) { + var code = list.get(index); + // 删除一条 + OkGo.post("http://" + SharedPreferencesUtils.getstring("ip", "") + + "/api/deleteBindingItem") + .params("epc", binding.unbindingEpc.getText().toString()) + .params("code", code) + .execute(new MyRecultCall(dialog, this) { + @Override + public void onSuccess(Response response) { + super.onSuccess(response); + var body = response.body(); + if (body.getCode() == 0) { + list.remove(index); + adapter.notifyDataSetChanged(); + } + Toast.makeText(UnBindingActivity.this, body.getMsg(), Toast.LENGTH_SHORT).show(); + } + }); + } + + } \ No newline at end of file diff --git a/app/src/main/java/com/example/bgsrfidtrack/adapter/UnBindingGoodsInfoAdapter.java b/app/src/main/java/com/example/bgsrfidtrack/adapter/UnBindingGoodsInfoAdapter.java index d732f2b..e64107e 100644 --- a/app/src/main/java/com/example/bgsrfidtrack/adapter/UnBindingGoodsInfoAdapter.java +++ b/app/src/main/java/com/example/bgsrfidtrack/adapter/UnBindingGoodsInfoAdapter.java @@ -52,7 +52,7 @@ public class UnBindingGoodsInfoAdapter extends RecyclerView.Adapter watBills; + private String user; + + + public String getUser() { + return user; + } + + public void setUser(String user) { + this.user = user; + } public List getWatBills() { return watBills; diff --git a/app/src/main/res/layout/activity_binding_db.xml b/app/src/main/res/layout/activity_binding_db.xml new file mode 100644 index 0000000..3e8e97c --- /dev/null +++ b/app/src/main/res/layout/activity_binding_db.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + +