Commit 4450e965 by 吴春元

删除无用元素

parent 474e84e1
......@@ -32,11 +32,10 @@
</activity>
<activity android:name=".ui.MainActivity" />
<activity android:name="com.sxyz.rfid.ui.out.OutboundActivity" />
<activity android:name="com.sxyz.rfid.ui.login.LoginActivity" />
<activity android:name="com.sxyz.rfid.ui.MainActivity2" />
<activity android:name="com.sxyz.rfid.ui.out.OutboundDetailActivity" />
<activity android:name="com.sxyz.rfid.ui.out.OutboundDetailListActivity" />
<activity android:name=".ui.out.OutboundActivity" />
<activity android:name=".ui.login.LoginActivity" />
<activity android:name=".ui.out.OutboundDetailActivity" />
<activity android:name=".ui.out.OutboundDetailListActivity" />
</application>
<!-- Android 10+ 需要添加 -->
......
package com.sxyz.rfid.ui;
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import com.chad.library.adapter.base.BaseQuickAdapter;
import com.chad.library.adapter.base.viewholder.BaseViewHolder;
import com.ashokvarma.bottomnavigation.BottomNavigationBar;
import com.ashokvarma.bottomnavigation.BottomNavigationItem;
import com.sxyz.rfid.App;
import com.sxyz.rfid.R;
import com.sxyz.rfid.base.BaseActivity;
import com.sxyz.rfid.databinding.ActivityHomeBinding;
import com.sxyz.rfid.ui.out.OutboundActivity;
import com.sxyz.rfid.utils.ToastUtil;
import java.util.ArrayList;
import java.util.List;
import com.sxyz.rfid.databinding.ActivityMainBinding;
import com.sxyz.rfid.ui.my.MyFragment;
import com.sxyz.rfid.ui.out.OutboundFragment;
import com.sxyz.rfid.ui.review.ReviewFragment;
import com.sxyz.rfid.utils.L;
import com.ubx.usdk.RFIDSDKManager;
import com.ubx.usdk.USDKManager;
import com.ubx.usdk.rfid.RfidManager;
import com.ubx.usdk.util.SoundTool;
/**
* 主要功能: 首页
*
* @Description:
* @Project: rfid-app
* @Package: com.sxyz.rfid.ui.ui.MainActivity
* @Package: com.sxyz.rfid.ui.MainActivity
* @author: chunyuanwu
* @date: 2025年12月27日 16:40
* @date: 2025年12月29日 16:40
* @version: 1.0.0
*/
public class MainActivity extends BaseActivity<ActivityHomeBinding> {
private List<DataBean> mDataList = new ArrayList<>();
private HomeAdapter adapter;
public class MainActivity extends BaseActivity<ActivityMainBinding> {
private final int[] imageViewArray = {R.drawable.chuku_icon, R.drawable.pandian_icon, R.drawable.wode_icon};
private final String[] strings = {"出库", "盘点", "我的"};
FragmentTransaction transaction;
FragmentManager manager;
public boolean RFID_INIT_STATUS = false;//RFID是否初始化成功
public RfidManager mRfidManager;//RFID实例
public int readerType = 0;//阅读器类型
@Override
public void initParms(Bundle mBundle) {
......@@ -38,160 +47,124 @@ public class MainActivity extends BaseActivity<ActivityHomeBinding> {
}
@Override
protected ActivityHomeBinding getViewBinding() {
return ActivityHomeBinding.inflate(getLayoutInflater());
protected ActivityMainBinding getViewBinding() {
return ActivityMainBinding.inflate(getLayoutInflater());
}
@Override
protected void initView() {
initToolBarTitle("仓储管理");
mDataList.add(new DataBean("出库管理", "处理商品出库操作,扫码更新库存信息", R.mipmap.outbound_icon, R.drawable.blue_round_bg, R.drawable.up_blue_line_round));
mDataList.add(new DataBean("库存盘点", "执行库存盘点,核对库存数量", R.mipmap.review_icon, R.drawable.orange_round_bg, R.drawable.up_orange_line_round));
// 设置3列的网格布局
GridLayoutManager layoutManager = new GridLayoutManager(this, 3);
mBinding.recyclerView.setLayoutManager(layoutManager);
adapter = new HomeAdapter(R.layout.item_home, mDataList);
mBinding.recyclerView.setAdapter(adapter);
initRfid();
//角标,如同QQ的红点
// final TextBadgeItem mBadgeItem = new TextBadgeItem().setBorderWidth(4).setAnimationDuration(200).setBackgroundColorResource(R.color.red).setHideOnSelect(false).setText("0");
// mBinding.bottombar.setMode(BottomNavigationBar.MODE_DEFAULT);
// mBinding.bottombar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_RIPPLE);//设置Mode和BackgroundStyle
mBinding.bottombar.addItem(new BottomNavigationItem(imageViewArray[0], strings[0]).setActiveColorResource(R.color.purple_200)).addItem(new BottomNavigationItem(imageViewArray[1], strings[1]).setActiveColorResource(R.color.purple_200)).addItem(new BottomNavigationItem(imageViewArray[2], strings[2]).setActiveColorResource(R.color.purple_200)).setFirstSelectedPosition(0).setBarBackgroundColor(R.color.c_f9f9fc).initialise();
}
@Override
protected void setListener() {
adapter.setOnItemClickListener((position, item) -> {
ToastUtil.showShort(item.getName());
mBinding.bottombar.setTabSelectedListener(new BottomNavigationBar.OnTabSelectedListener() {
@Override
public void onTabSelected(int position) {
manager = getSupportFragmentManager();
transaction = manager.beginTransaction();
switch (position) {
case 0://出库管理
startActivity(OutboundActivity.class);
case 0:
transaction.replace(R.id.framelayout, OutboundFragment.newInstance());
break;
case 1://库存盘点
// startActivity(InventoryActivity.class);
case 1:
transaction.replace(R.id.framelayout, ReviewFragment.newInstance());
break;
case 2:
transaction.replace(R.id.framelayout, MyFragment.newInstance());
break;
}
});
}
@Override
protected void initData() {
transaction.commit();
}
}
class DataBean {
public DataBean(String name, String tag, int img, int imgBg, int imgLine) {
this.name = name;
this.tag = tag;
this.img = img;
this.imgBg = imgBg;
this.imgLine = imgLine;
}
String name;
String tag;
int img;
int imgBg;
int imgLine;
public String getName() {
return name;
}
@Override
public void onTabUnselected(int position) {
public void setName(String name) {
this.name = name;
}
public String getTag() {
return tag;
}
@Override
public void onTabReselected(int position) {
public void setTag(String tag) {
this.tag = tag;
}
public int getImg() {
return img;
});
//设置初始页面
setDefaultFragment();
}
public void setImg(int img) {
this.img = img;
private void setDefaultFragment() {
manager = getSupportFragmentManager();
transaction = manager.beginTransaction();
transaction.replace(R.id.framelayout, OutboundFragment.newInstance());
transaction.commit();
}
public int getImgBg() {
return imgBg;
}
@Override
protected void initData() {
public void setImgBg(int imgBg) {
this.imgBg = imgBg;
}
public int getImgLine() {
return imgLine;
/**
* 初始化RFID
*/
private void initRfid() {
//初始化音效SDK
SoundTool.getInstance(App.getContext());
//初始化SDK
// 在异步回调中拿到RFID实例
RFIDSDKManager.getInstance().power(true);
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
boolean connect = RFIDSDKManager.getInstance().connect();
if (connect) {
L.i("initRfid() success.");
RFID_INIT_STATUS = true;
readerType = RFIDSDKManager.getInstance().getRfidManager().getReaderType();//80为短距,其他为长距
mRfidManager = RFIDSDKManager.getInstance().getRfidManager();
String firmware = RFIDSDKManager.getInstance().getRfidManager().getFirmwareVersion();
L.i("initRfid: GetReaderType() = " + readerType);
} else {
L.i("initRfid fail.");
}
public void setImgLine(int imgLine) {
this.imgLine = imgLine;
}
}
class HomeAdapter extends BaseQuickAdapter<DataBean, BaseViewHolder> {
public HomeAdapter(int layoutResId, List<DataBean> data) {
super(layoutResId, data);
}, 1500);
}
@Override
protected void convert(@NonNull BaseViewHolder baseViewHolder, DataBean dataBean) {
baseViewHolder.setText(R.id.tv_title, dataBean.getName());
baseViewHolder.setText(R.id.tv_tag, dataBean.getTag());
baseViewHolder.setImageResource(R.id.iv_background, dataBean.getImg());
baseViewHolder.setBackgroundResource(R.id.iv_background, dataBean.getImgBg());
baseViewHolder.setBackgroundResource(R.id.v_line, dataBean.getImgLine());
baseViewHolder.itemView.setOnClickListener(v -> {
if (mItemClickListener != null) {
mItemClickListener.onItemClick(baseViewHolder.getAdapterPosition(), dataBean);
//实现CardView点击放大缩小效果
//使用ObjectAnimator实现平滑缩放动画
//先放大10%再恢复原状
//动画持续时间为300毫秒
ObjectAnimator scaleUpX = ObjectAnimator.ofFloat(v, "scaleX", 1.0f, 1.1f);
ObjectAnimator scaleUpY = ObjectAnimator.ofFloat(v, "scaleY", 1.0f, 1.1f);
scaleUpX.setDuration(150);
scaleUpY.setDuration(150);
scaleUpX.start();
scaleUpY.start();
scaleUpX.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
protected void onPause() {
SoundTool.getInstance(App.getContext()).release();
super.onPause();
}
@Override
public void onAnimationEnd(Animator animation) {
ObjectAnimator scaleDownX = ObjectAnimator.ofFloat(v, "scaleX", 1.1f, 1.0f);
ObjectAnimator scaleDownY = ObjectAnimator.ofFloat(v, "scaleY", 1.1f, 1.0f);
scaleDownX.setDuration(150);
scaleDownY.setDuration(150);
scaleDownX.start();
scaleDownY.start();
protected void onDestroy() {
RFID_INIT_STATUS = false;
USDKManager.getInstance().release();
if (mRfidManager != null) {
mRfidManager.disConnect();
mRfidManager.release();
L.i("onDestroyView: rfid close");
}
@Override
public void onAnimationCancel(Animator animation) {
SoundTool.getInstance(App.getContext()).release();
super.onDestroy();
}
/**
* 退出应用 释放资源
*/
@Override
public void onAnimationRepeat(Animator animation) {
}
});
}
});
}
public interface OnItemClickListener {
void onItemClick(int position, DataBean item);
}
private OnItemClickListener mItemClickListener;
public void setOnItemClickListener(OnItemClickListener mItemClickListener) {
this.mItemClickListener = mItemClickListener;
public void finish() {
SoundTool.getInstance(App.getContext()).release();
USDKManager.getInstance().release();
super.finish();
}
}
\ No newline at end of file
package com.sxyz.rfid.ui;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
import android.view.WindowManager;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.viewpager.widget.ViewPager;
import com.google.android.material.tabs.TabLayout;
import com.sxyz.courtai.ui.pojo.TagScan;
import com.sxyz.rfid.App;
import com.sxyz.rfid.R;
import com.sxyz.rfid.ui.ui.main.Activity6BTag;
import com.sxyz.rfid.ui.ui.main.SectionsPagerAdapter;
import com.sxyz.rfid.ui.ui.main.SettingFragment;
import com.sxyz.rfid.ui.ui.main.TagManageFragment;
import com.sxyz.rfid.ui.ui.main.TagScanFragmentNew;
import com.sxyz.rfid.utils.ByteUtils;
import com.ubx.usdk.RFIDSDKManager;
import com.ubx.usdk.USDKManager;
import com.ubx.usdk.rfid.RfidManager;
import com.ubx.usdk.util.QueryMode;
import com.ubx.usdk.util.SoundTool;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class MainActivity1 extends AppCompatActivity {
public static final String TAG = "usdk";
public boolean RFID_INIT_STATUS = false;
public RfidManager mRfidManager;
public List<String> mDataParents;
public List<TagScan> tagScanSpinner;
private List<Fragment> fragments;
private ViewPager viewPager;
private TabLayout tabs;
public int readerType = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// supportRequestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
SoundTool.getInstance(App.getContext());
mDataParents = new ArrayList<>();
tagScanSpinner = new ArrayList<>();
initRfid();
fragments = Arrays.asList(TagScanFragmentNew.newInstance(MainActivity1.this)
, TagManageFragment.newInstance(MainActivity1.this)
, SettingFragment.newInstance(MainActivity1.this));
SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(this, getSupportFragmentManager(), fragments);
viewPager = findViewById(R.id.view_pager);
viewPager.setAdapter(sectionsPagerAdapter);
viewPager.setOffscreenPageLimit(3);
tabs = findViewById(R.id.tabs);
tabs.setupWithViewPager(viewPager);
}
@Override
protected void onResume() {
super.onResume();
String s7 = "1111222233334444555566667777";
String s8 = "11112222333344445555666677778888";
String s9 = "111122223333444455556666777788889999";
String s10 = "1111222233334444555566667777888899990000";
String s7Llen = ByteUtils.getPC(s7);
String s8Llen = ByteUtils.getPC(s8);
String s9Llen = ByteUtils.getPC(s9);
String s10Llen = ByteUtils.getPC(s10);
Log.d(TAG, "onResume() s7Llen:" + s7Llen + " s8Llen:" + s8Llen + " s9Llen:" + s9Llen + " s10Llen:" + s10Llen);
}
public void initRfid() {
// 在异步回调中拿到RFID实例
RFIDSDKManager.getInstance().power(true);
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
boolean connect = RFIDSDKManager.getInstance().connect();
if (connect) {
Log.d(TAG, "initRfid() success.");
RFID_INIT_STATUS = true;
readerType = RFIDSDKManager.getInstance().getRfidManager().getReaderType();//80为短距,其他为长距
mRfidManager = RFIDSDKManager.getInstance().getRfidManager();
String firmware = RFIDSDKManager.getInstance().getRfidManager().getFirmwareVersion();
try {
((TagScanFragmentNew) fragments.get(0)).textFirmware.setText(getString(R.string.firmware) + firmware);
} catch (Exception e) {
e.printStackTrace();
}
Log.d(TAG, "initRfid: GetReaderType() = " + readerType);
} else {
Log.d(TAG, "initRfid fail.");
}
}
}, 1500);
}
// public void initRfid() {
// // 在异步回调中拿到RFID实例
// USDKManager.getInstance().init(new InitListener() {
// @Override
// public void onStatus(boolean status) {
// if ( status ) {
// Log.d(TAG, "initRfid() success.");
// RFID_INIT_STATUS = true;
// mRfidManager = USDKManager.getInstance().getRfidManager();
// readerType = mRfidManager.getReaderType();//80为短距,其他为长距
// runOnUiThread(new Runnable() {
// @Override
// public void run() {
// String firmware = mRfidManager.getFirmwareVersion();
// try {
// ((TagScanFragment)fragments.get(0)).textFirmware.setText(getString(R.string.firmware) + firmware);
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// });
// getScanInteral();
// Log.d(TAG, "initRfid: GetReaderType() = " +readerType );
// }else {
// Log.d(TAG, "initRfid fail.");
// }
// }
// });
//
// }
/**
* 设置查询模式
*
* @param mode
*/
private void setQueryMode(int mode) {
mRfidManager.setQueryMode(QueryMode.EPC_TID);
}
/**
* 通过TID写标签
*/
private void writeTagByTid() {
//写入方法(不需要先选中)
String tid = "24 length TID";
String writeData = "need write EPC datas ";
mRfidManager.writeTagByTid(tid, (byte) 0, (byte) 2, "00000000".getBytes(), writeData);
}
@Override
protected void onDestroy() {
RFID_INIT_STATUS = false;
USDKManager.getInstance().release();
if (mRfidManager != null) {
mRfidManager.disConnect();
mRfidManager.release();
Log.d(TAG, "onDestroyView: rfid close");
}
SoundTool.getInstance(App.getContext()).release();
super.onDestroy();
}
@Override
protected void onPause() {
SoundTool.getInstance(App.getContext()).release();
super.onPause();
}
/**
* 设置盘存时间
*
* @param interal 0-200 ms
*/
private void setScanInteral(int interal) {
int setScanInterval = mRfidManager.setScanInterval(interal);
Log.v(TAG, "--- setScanInterval() ----" + setScanInterval);
}
/**
* 获取盘存时间
*/
private void getScanInteral() {
int getScanInterval = mRfidManager.getScanInterval();
Log.v(TAG, "--- getScanInterval() ----" + getScanInterval);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
return super.onPrepareOptionsMenu(menu);//弹出Menu前调用的方法
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_rate_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
switch (id) {
case R.id.action_6b:
Intent intent = new Intent(MainActivity1.this, Activity6BTag.class);
startActivity(intent);
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public void finish() {
Log.e(TAG, " finish: .......");
SoundTool.getInstance(App.getContext()).release();
USDKManager.getInstance().release();
super.finish();
}
// @Override
// public boolean dispatchKeyEvent(KeyEvent event) {
//
// if((event.getKeyCode() == 520||event.getKeyCode() == 521) && event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0){
// //TODO 按下 扫描键
// return true;
// }else if((event.getKeyCode() == 520||event.getKeyCode() == 521) && event.getAction() == KeyEvent.ACTION_UP && event.getRepeatCount() == 0){
// //TODO 抬起 扫描键
// return true;
// }
// return super.dispatchKeyEvent(event);
// }
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getKeyCode() == 523 && event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) {
//TODO 按下 开启盘点
if (viewPager.getCurrentItem() == 0) {
TagScanFragmentNew fragment = (TagScanFragmentNew) fragments.get(0);
fragment.scanStartBtn.callOnClick();
}
return true;
} else if (event.getKeyCode() == 523 && event.getAction() == KeyEvent.ACTION_UP && event.getRepeatCount() == 0) {
//TODO 抬起 停止盘点
return true;
}
return super.dispatchKeyEvent(event);
}
}
\ No newline at end of file
package com.sxyz.rfid.ui;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import androidx.viewpager.widget.ViewPager;
import com.ashokvarma.bottomnavigation.BottomNavigationBar;
import com.ashokvarma.bottomnavigation.BottomNavigationItem;
import com.google.android.material.tabs.TabLayout;
import com.sxyz.rfid.App;
import com.sxyz.rfid.R;
import com.sxyz.rfid.base.BaseActivity;
import com.sxyz.rfid.databinding.ActivityMain2Binding;
import com.sxyz.rfid.ui.my.MyFragment;
import com.sxyz.rfid.ui.out.OutboundFragment;
import com.sxyz.rfid.ui.review.ReviewFragment;
import com.sxyz.rfid.ui.ui.main.TagScanFragmentNew;
import com.sxyz.rfid.utils.L;
import com.ubx.usdk.RFIDSDKManager;
import com.ubx.usdk.USDKManager;
import com.ubx.usdk.rfid.RfidManager;
import com.ubx.usdk.util.SoundTool;
import java.util.List;
/**
* 主要功能: 首页
*
* @Description:
* @Project: rfid-app
* @Package: com.sxyz.rfid.ui.MainActivity
* @author: chunyuanwu
* @date: 2025年12月29日 16:40
* @version: 1.0.0
*/
public class MainActivity2 extends BaseActivity<ActivityMain2Binding> {
private final int[] imageViewArray = {R.drawable.chuku_icon, R.drawable.pandian_icon, R.drawable.wode_icon};
private final String[] strings = {"出库", "盘点", "我的"};
FragmentTransaction transaction;
FragmentManager manager;
public boolean RFID_INIT_STATUS = false;//RFID是否初始化成功
public RfidManager mRfidManager;//RFID实例
public int readerType = 0;//阅读器类型
@Override
public void initParms(Bundle mBundle) {
}
@Override
protected ActivityMain2Binding getViewBinding() {
return ActivityMain2Binding.inflate(getLayoutInflater());
}
@Override
protected void initView() {
initRfid();
//角标,如同QQ的红点
// final TextBadgeItem mBadgeItem = new TextBadgeItem().setBorderWidth(4).setAnimationDuration(200).setBackgroundColorResource(R.color.red).setHideOnSelect(false).setText("0");
// mBinding.bottombar.setMode(BottomNavigationBar.MODE_DEFAULT);
// mBinding.bottombar.setBackgroundStyle(BottomNavigationBar.BACKGROUND_STYLE_RIPPLE);//设置Mode和BackgroundStyle
mBinding.bottombar.addItem(new BottomNavigationItem(imageViewArray[0], strings[0]).setActiveColorResource(R.color.purple_200)).addItem(new BottomNavigationItem(imageViewArray[1], strings[1]).setActiveColorResource(R.color.purple_200)).addItem(new BottomNavigationItem(imageViewArray[2], strings[2]).setActiveColorResource(R.color.purple_200)).setFirstSelectedPosition(0).setBarBackgroundColor(R.color.c_f9f9fc).initialise();
}
@Override
protected void setListener() {
mBinding.bottombar.setTabSelectedListener(new BottomNavigationBar.OnTabSelectedListener() {
@Override
public void onTabSelected(int position) {
manager = getSupportFragmentManager();
transaction = manager.beginTransaction();
switch (position) {
case 0:
transaction.replace(R.id.framelayout, OutboundFragment.newInstance());
break;
case 1:
transaction.replace(R.id.framelayout, ReviewFragment.newInstance());
break;
case 2:
transaction.replace(R.id.framelayout, MyFragment.newInstance());
break;
}
transaction.commit();
}
@Override
public void onTabUnselected(int position) {
}
@Override
public void onTabReselected(int position) {
}
});
//设置初始页面
setDefaultFragment();
}
private void setDefaultFragment() {
manager = getSupportFragmentManager();
transaction = manager.beginTransaction();
transaction.replace(R.id.framelayout, OutboundFragment.newInstance());
transaction.commit();
}
@Override
protected void initData() {
}
/**
* 初始化RFID
*/
private void initRfid() {
//初始化音效SDK
SoundTool.getInstance(App.getContext());
//初始化SDK
// 在异步回调中拿到RFID实例
RFIDSDKManager.getInstance().power(true);
new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
@Override
public void run() {
boolean connect = RFIDSDKManager.getInstance().connect();
if (connect) {
L.i("initRfid() success.");
RFID_INIT_STATUS = true;
readerType = RFIDSDKManager.getInstance().getRfidManager().getReaderType();//80为短距,其他为长距
mRfidManager = RFIDSDKManager.getInstance().getRfidManager();
String firmware = RFIDSDKManager.getInstance().getRfidManager().getFirmwareVersion();
L.i("initRfid: GetReaderType() = " + readerType);
} else {
L.i("initRfid fail.");
}
}
}, 1500);
}
@Override
protected void onPause() {
SoundTool.getInstance(App.getContext()).release();
super.onPause();
}
@Override
protected void onDestroy() {
RFID_INIT_STATUS = false;
USDKManager.getInstance().release();
if (mRfidManager != null) {
mRfidManager.disConnect();
mRfidManager.release();
L.i("onDestroyView: rfid close");
}
SoundTool.getInstance(App.getContext()).release();
super.onDestroy();
}
/**
* 退出应用 释放资源
*/
@Override
public void finish() {
SoundTool.getInstance(App.getContext()).release();
USDKManager.getInstance().release();
super.finish();
}
}
\ No newline at end of file
......@@ -20,14 +20,12 @@ public class SplashActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// startActivity(new Intent(SplashActivity.this, MainActivity.class));//跳转首页
// finish();
timer = new Timer();
TimerTask task = new TimerTask() {
@Override
public void run() {
if (LocalUtils.isLogin()) {
startActivity(new Intent(SplashActivity.this, MainActivity2.class));//跳转首页
startActivity(new Intent(SplashActivity.this, MainActivity.class));//跳转首页
finish();
} else {
startActivity(new Intent(SplashActivity.this, LoginActivity.class));
......
......@@ -10,30 +10,20 @@ import android.text.method.PasswordTransformationMethod;
import android.view.View;
import com.blankj.utilcode.util.SPUtils;
import com.hjq.permissions.OnPermission;
import com.hjq.permissions.Permission;
import com.hjq.permissions.XXPermissions;
import com.orhanobut.hawk.Hawk;
import com.sxyz.rfid.AppConfig;
import com.sxyz.rfid.R;
import com.sxyz.rfid.base.BaseActivity;
import com.sxyz.rfid.databinding.ActivityLoginBinding;
import com.sxyz.rfid.greendao.GreenDaoManager;
import com.sxyz.rfid.greendao.model.Out;
import com.sxyz.rfid.presenter.ILoginPresenter;
import com.sxyz.rfid.presenter.imp.LoginPresenterImpl;
import com.sxyz.rfid.presenter.model.LoginModel;
import com.sxyz.rfid.presenter.view.ILoginView;
import com.sxyz.rfid.ui.MainActivity;
import com.sxyz.rfid.ui.MainActivity2;
import com.sxyz.rfid.ui.login.bean.UserBean;
import com.sxyz.rfid.utils.LocalUtils;
import com.sxyz.rfid.utils.ToastUtil;
import java.util.List;
import sql.com.yz.db.DaoSession;
/**
* @Description: 登录
* @Author: chunyuan.wu
......@@ -124,7 +114,7 @@ public class LoginActivity extends BaseActivity<ActivityLoginBinding> implements
SPUtils.getInstance().put(LocalUtils.AUTO_PWD, mBinding.etPassword.getText().toString());//保存密码
SPUtils.getInstance().put(LocalUtils.TOKEN, loginModel.getToken());//AI TOKEN
Hawk.put(LocalUtils.LOGIN_MODEL, loginModel);
startActivityFinish(MainActivity2.class);//跳转首页
startActivityFinish(MainActivity.class);//跳转首页
ToastUtil.showShort(R.string.login_success);
}
......
......@@ -21,7 +21,6 @@ import com.sxyz.rfid.presenter.model.OutboundFlowingWaterModel;
import com.sxyz.rfid.presenter.model.OutboundModel;
import com.sxyz.rfid.presenter.view.IOutBoundView;
import com.sxyz.rfid.ui.out.adapter.OutBoundDetailsAdapter;
import com.sxyz.rfid.ui.ui.main.TagScanFragmentNew;
import com.sxyz.rfid.utils.ToastUtil;
import com.sxyz.rfid.widgets.OutBoundPopupWindow;
import com.ubx.usdk.RFIDSDKManager;
......
package com.sxyz.rfid.ui.ui.main;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.sxyz.rfid.R;
import com.ubx.usdk.RFIDSDKManager;
import com.ubx.usdk.bean.Tag6B;
import com.ubx.usdk.rfid.RfidManager;
import com.ubx.usdk.util.ConvertUtils;
import com.ubx.usdk.util.LogUtils;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class Activity6BTag extends AppCompatActivity implements OnClickListener, AdapterView.OnItemClickListener, AdapterView.OnItemSelectedListener {
private final String TAG = Activity6BTag.class.getSimpleName();
Button rButton;
Button wButton;
Button lockButton;
Button checkButtn;
EditText c_wordPtr;
EditText c_len;
EditText content;
EditText readContent;
private ArrayAdapter<String> spada_epc;
Spinner spepc;
TextView tvResult;
byte[] TranData = null;
Handler handler;
Thread mThread = null;
private RfidManager mRfidManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_6b);
initView();
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
try {
switch (msg.what) {
case 0x01:
String arg = msg.obj + "";
tvResult.setText(arg);
break;
case 0x02:
break;
case 0x03:
break;
case 0x04:
break;
case MSG_UPDATE_LISTVIEW:
String result = msg.obj + "";
String[] strs = result.split(",");
if (strs.length == 2) {
addEPCToList(strs[0]);
} else {
addEPCToList(strs[0] + "," + strs[1]);
}
break;
case MSG_UPDATE_STOP:
setViewEnabled(true);
BtInventory.setText(getString(R.string.btInventory));
break;
default:
break;
}
} catch (Exception ex) {
ex.toString();
}
}
};
initonCreate();
}
private void initView() {
spepc = (Spinner) findViewById(R.id.b_spinner);
tvResult = (TextView) findViewById(R.id.b_result);
rButton = (Button) findViewById(R.id.button_read_6b);
wButton = (Button) findViewById(R.id.button_write_6b);
lockButton = (Button) findViewById(R.id.button_lock);
checkButtn = (Button) findViewById(R.id.button_checklok);
rButton.setOnClickListener(this);
wButton.setOnClickListener(this);
lockButton.setOnClickListener(this);
checkButtn.setOnClickListener(this);
c_wordPtr = (EditText) findViewById(R.id.et_wordptr);
c_wordPtr.setText("8");
c_len = (EditText) findViewById(R.id.et_length);
c_len.setText("6");
content = (EditText) findViewById(R.id.et_content_6b);
readContent = (EditText) findViewById(R.id.et_read_6b);
// initRfid();
}
@Override
protected void onResume() {
getRFIDManager();
updateUISpinner();
super.onResume();
isStopThread = false;
}
private void getRFIDManager() {
if (mRfidManager == null) {
mRfidManager = RFIDSDKManager.getInstance().getRfidManager();
}
}
private void updateUISpinner() {
// TODO Auto-generated method stub
if (mlist != null) {
int epcCount = mlist.size();
String[] epcdata = new String[epcCount];
for (int i = 0; i < mlist.size(); i++) {
String temp = mlist.get(i);
epcdata[i] = temp;
}
// if(epcCount>0)
{
spada_epc = new ArrayAdapter<String>(Activity6BTag.this,
android.R.layout.simple_spinner_item, epcdata);
spada_epc.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spepc.setAdapter(spada_epc);
if (epcCount > 0)
spepc.setSelection(0, false);
}
}
}
@Override
public void onClick(View view) {
getRFIDManager();
if (mRfidManager == null) {
toast("rfid 未初始化.");
return;
}
if (view == rButton) {
String strEPC = "";
if (spepc.getSelectedItem() != null)
strEPC = spepc.getSelectedItem().toString();
byte Num = (byte) (int) Integer.valueOf(c_len.getText().toString());
int WordPtr = (int) Integer.valueOf(c_wordPtr.getText().toString());
byte[] ID = ConvertUtils.hexStringToBytes(strEPC);
byte[] data = new byte[Num & 255];
String result = mRfidManager.iso180006BReadTag( ID, (byte) WordPtr, Num);
if (TextUtils.isEmpty(result)) {
toast("读取失败");
}else {
toast("读取成功:" + result);
readContent.setText("" + result);
}
} else if (view == wButton) {
String strEPC = "";
if (spepc.getSelectedItem() != null)
strEPC = spepc.getSelectedItem().toString();
byte WordPtr = (byte) (int) Integer.valueOf(c_wordPtr.getText().toString());
byte[] ID = ConvertUtils.hexStringToBytes(strEPC);
String strData = content.getText().toString();
byte Num = (byte) (strData.length() / 2);
byte[] data = ConvertUtils.hexStringToBytes(strData);
int result = mRfidManager.iso180006BWriteTag( ID, WordPtr, Num, data);
if (result == 0) {
toast("写成功");
} else {
toast("写失败");
}
} else if (view == lockButton) {
String strEPC = "";
if (spepc.getSelectedItem() != null)
strEPC = spepc.getSelectedItem().toString();
byte WordPtr = (byte) (int) Integer.valueOf(c_wordPtr.getText().toString());
byte[] ID = ConvertUtils.hexStringToBytes(strEPC);
int result = mRfidManager.iso180006BLockTag( ID, WordPtr);
if (result != 0) {
toast("锁定失败 "+result);
} else {
toast("锁定成功");
}
} else if (view == checkButtn) {
int result = -1;
String strEPC = "";
if (spepc.getSelectedItem() != null)
strEPC = spepc.getSelectedItem().toString();
byte WordPtr = (byte) (int) Integer.valueOf(c_wordPtr.getText().toString());
byte[] ID = ConvertUtils.hexStringToBytes(strEPC);
int lockstatus = -1;
result = mRfidManager.iso180006BQueryLockTag( ID, (byte) WordPtr,lockstatus);
if (result != 0) {
toast("检测失败");
}else {
if (lockstatus == 0)
toast("未锁定");
else if (lockstatus == 1)
toast("已锁定");
}
} else if (view == BtInventory) {
readTag();
} else if (view == BtClear) {
clearData();
}
}
private void toast(final String msg) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(Activity6BTag.this, "" + msg, Toast.LENGTH_LONG).show();
}
});
}
private int inventoryFlag = 1;
private ArrayList<HashMap<String, String>> tagList;
SimpleAdapter adapter;
Button BtClear;
TextView tv_count;
TextView tv_alltag;
Button BtInventory;
ListView LvTags;
private LinearLayout llContinuous;
private HashMap<String, String> map;
public boolean isStopThread = false;
private static final int MSG_UPDATE_LISTVIEW = 10;
private static final int MSG_UPDATE_STOP = 13;
public long CardNumber;
public static List<String> mlist = new ArrayList<String>();
private void initonCreate() {
tagList = new ArrayList<HashMap<String, String>>();
BtClear = (Button) findViewById(R.id.BtClear);
tv_count = (TextView) findViewById(R.id.tv_count);
tv_alltag = (TextView) findViewById(R.id.tv_alltag);
String tr = "";
BtInventory = (Button) findViewById(R.id.BtInventory);
LvTags = (ListView) findViewById(R.id.LvTags);
llContinuous = (LinearLayout) findViewById(R.id.llContinuous);
adapter = new SimpleAdapter(this, tagList, R.layout.listtag_items,
new String[]{"tagUii", "tagLen", "tagCount", "tagRssi"},
new int[]{R.id.TvTagUii, R.id.TvTagLen, R.id.TvTagCount});
BtClear.setOnClickListener(this);
BtInventory.setOnClickListener(this);
LvTags.setAdapter(adapter);
clearData();
Log.i("MY", "UHFReadTagFragment.EtCountOfTags=" + tv_count.getText());
}
private void setViewEnabled(boolean enabled) {
// btnFilter.setEnabled(enabled);
BtClear.setEnabled(enabled);
}
public int checkIsExist(String strEPC) {
int existFlag = -1;
if (strEPC == null || strEPC.length() == 0) {
return existFlag;
}
String tempStr = "";
for (int i = 0; i < tagList.size(); i++) {
HashMap<String, String> temp = new HashMap<String, String>();
temp = tagList.get(i);
tempStr = temp.get("tagUii");
if (strEPC.equals(tempStr)) {
existFlag = i;
break;
}
}
return existFlag;
}
private void clearData() {
tv_count.setText("0");
tv_alltag.setText("0");
tagList.clear();
mlist.clear();
CardNumber = 0;
adapter.notifyDataSetChanged();
}
/**
* 添加EPC到列表中
*
* @param
*/
private void addEPCToList(String rfid) {
if (!TextUtils.isEmpty(rfid)) {
String epc = "";
String[] data = rfid.split(",");
if (data.length == 1) {
epc = data[0];
} else {
epc = "EPC:" + data[0] + "\r\nMem:" + data[1];
}
int index = checkIsExist(epc);
map = new HashMap<String, String>();
map.put("tagUii", epc);
map.put("tagCount", String.valueOf(1));
CardNumber++;
if (index == -1) {
tagList.add(map);
LvTags.setAdapter(adapter);
tv_count.setText("" + adapter.getCount());
mlist.add(data[0]);
} else {
int tagcount = Integer.parseInt(
tagList.get(index).get("tagCount"), 10) + 1;
map.put("tagCount", String.valueOf(tagcount));
tagList.set(index, map);
}
tv_alltag.setText(String.valueOf(CardNumber));
adapter.notifyDataSetChanged();
}
}
private void readTag() {
LogUtils.v("rfid", " readTag() ");
if (BtInventory.getText().equals(getString(R.string.btInventory)))// 识别标签
{
BtInventory.setText(getString(R.string.btn_stop_Inventory));
setViewEnabled(false);
List<Tag6B> list = mRfidManager.iso180006BInventory();
if (list != null) {
int size = list.size();
for (int i = 0; i < size; i++) {
String strUID = list.get(i).getUid();
int rssi = list.get(i).getRssi();
LogUtils.v(TAG, "onInventory6BTag() strUID:" + strUID+" rssi:"+rssi);
String epc = strUID;
Message msg = handler.obtainMessage();
msg.what = MSG_UPDATE_LISTVIEW;
msg.obj = epc + "," + rssi;
handler.sendMessage(msg);
}
}
stopInventory();
} else {// 停止识别
// stopInventory();
}
}
private void stopInventory() {
setViewEnabled(true);
BtInventory.setText(getString(R.string.btInventory));
updateUISpinner();
}
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
}
@Override
protected void onPause() {
super.onPause();
stopInventory();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int position,
long arg3) {
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
}
package com.sxyz.rfid.ui.ui.main;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import com.sxyz.rfid.R;
import java.util.List;
public class ManageListAdapterRv extends RecyclerView.Adapter<ManageListAdapterRv.ViewHolder> {
private List<com.sxyz.courtai.ui.pojo.TagManage> data;
private Context context;
private onItemSelectedListener onItemSelectedListener;
private int currentItem = -1;
private int temp = -1;
public ManageListAdapterRv(List<com.sxyz.courtai.ui.pojo.TagManage> data, Context context) {
this.data = data;
this.context = context;
}
public List<com.sxyz.courtai.ui.pojo.TagManage> getData() {
return data;
}
public void setData(List<com.sxyz.courtai.ui.pojo.TagManage> data) {
this.data = data;
notifyDataSetChanged();
}
public ManageListAdapterRv.onItemSelectedListener getOnItemSelectedListener() {
return onItemSelectedListener;
}
public void setOnItemSelectedListener(ManageListAdapterRv.onItemSelectedListener onItemSelectedListener) {
this.onItemSelectedListener = onItemSelectedListener;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View mView = LayoutInflater.from(context).inflate(R.layout.tag_manage_item, parent, false);
return new ViewHolder(mView);
}
@Override
public void onBindViewHolder(final ViewHolder holder, @SuppressLint("RecyclerView") final int position) {
holder.refreshView(position, data.get(position));
holder.itemView.setSelected(holder.getLayoutPosition() == currentItem);
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
holder.itemView.setSelected(true);
temp = currentItem;
currentItem = holder.getLayoutPosition();
notifyItemChanged(temp);
onItemSelectedListener.onItemSelected(holder.itemView, position, data.get(position));
}
});
}
@Override
public int getItemCount() {
return null != data ? data.size() : 0;
}
public class ViewHolder extends RecyclerView.ViewHolder {
private View mView;
TextView manageEpcText;
TextView manageDataText;
public ViewHolder(View view) {
super(view.getRootView());
this.mView = view;
manageEpcText = mView.findViewById(R.id.manage_epc_text);
manageDataText = mView.findViewById(R.id.manage_data_text);
}
private void refreshView(int position, com.sxyz.courtai.ui.pojo.TagManage data) {
Log.d("usdk", "refreshView: data = " + data + ", i = " + position);
manageEpcText.setText(data.getEpc());
manageDataText.setText(data.getData());
}
}
interface onItemSelectedListener {
void onItemSelected(View v, int position, com.sxyz.courtai.ui.pojo.TagManage data);
}
}
package com.sxyz.rfid.ui.ui.main;
import android.annotation.SuppressLint;
import android.content.Context;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
import com.sxyz.rfid.R;
import java.util.List;
public class ScanListAdapterRv extends RecyclerView.Adapter<ScanListAdapterRv.ViewHolder> {
private List<com.sxyz.courtai.ui.pojo.TagScan> data;
private Context context;
public OnClickListener onClickListener;
public ScanListAdapterRv(List<com.sxyz.courtai.ui.pojo.TagScan> data, Context context) {
this.data = data;
this.context = context;
}
public void setData(List<com.sxyz.courtai.ui.pojo.TagScan> data) {
this.data = data;
if (this.data.size()>0) {
notifyItemRangeChanged(0, data.size());
}else {
notifyDataSetChanged();
}
}
public void setOnClickListener(OnClickListener onClickListener) {
this.onClickListener = onClickListener;
}
@Override
public ViewHolder onCreateViewHolder( ViewGroup parent, int viewType) {
View mView = LayoutInflater.from(context).inflate(R.layout.tag_scan_item, parent, false);
return new ViewHolder(mView);
}
@Override
public void onBindViewHolder(ViewHolder holder, @SuppressLint("RecyclerView") final int position) {
if (onClickListener != null) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
onClickListener.onSelectEpc(data.get(position), position);
}
});
}
holder.refreshView(position, data.get(position));
}
public interface OnClickListener {
void onSelectEpc(com.sxyz.courtai.ui.pojo.TagScan data, int position);
}
@Override
public int getItemCount() {
return null != data ? data.size() : 0;
}
public class ViewHolder extends RecyclerView.ViewHolder {
private View mView;
TextView listEpcText;
TextView listTidText ;
TextView listTotalText;
TextView listRssiText;
public ViewHolder( View view) {
super(view.getRootView());
this.mView = view;
listEpcText = mView.findViewById(R.id.list_epc_text);
listTidText = mView.findViewById(R.id.list_tid_text);
listTotalText = mView.findViewById(R.id.list_total_text);
listRssiText = mView.findViewById(R.id.list_rssi_text);
}
private void refreshView(int position, com.sxyz.courtai.ui.pojo.TagScan data) {
listEpcText.setText("EPC:"+data.getEpc());
listTidText.setText("DATA:"+data.getTid());
if (TextUtils.isEmpty(data.getTid())){
listTidText.setVisibility(View.GONE);
}else {
listTidText.setVisibility(View.VISIBLE);
}
listTotalText.setText(data.getCount() + "");
listRssiText.setText(data.getRssi());
}
}
}
package com.sxyz.rfid.ui.ui.main;
import android.content.Context;
import androidx.annotation.StringRes;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import com.sxyz.rfid.R;
import java.util.List;
/**
* A [FragmentPagerAdapter] that returns a fragment corresponding to
* one of the sections/tabs/pages.
*/
public class SectionsPagerAdapter extends FragmentPagerAdapter {
@StringRes
private static final int[] TAB_TITLES = new int[]{R.string.tab_text_1, R.string.tab_text_2, R.string.tab_text_3};
private final Context mContext;
private List<Fragment> data;
public SectionsPagerAdapter(Context context, FragmentManager fm, List<Fragment> data) {
super(fm);
mContext = context;
this.data = data;
}
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a PlaceholderFragment (defined as a static inner class below).
return data.get(position);
}
@Override
public CharSequence getPageTitle(int position) {
return mContext.getResources().getString(TAB_TITLES[position]);
}
@Override
public int getCount() {
// Show 2 total pages.
return null != data ? data.size() : 0;
}
}
\ No newline at end of file
package com.sxyz.rfid.ui.ui.main;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.SpinnerAdapter;
import android.widget.TextView;
import android.widget.Toast;
import androidx.fragment.app.Fragment;
import com.sxyz.rfid.R;
import com.sxyz.rfid.ui.MainActivity;
import com.sxyz.rfid.ui.MainActivity1;
import com.sxyz.rfid.utils.ToastUtil;
import com.ubx.usdk.bean.CustomRegionBean;
import com.ubx.usdk.rfid.aidl.IRfidCallback;
import com.ubx.usdk.rfid.aidl.RfidDate;
import java.util.ArrayList;
import java.util.List;
/**
* A simple {@link Fragment} subclass.
* Use the {@link SettingFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class SettingFragment extends Fragment implements View.OnClickListener {
public static final String TAG = SettingFragment.class.getSimpleName();
private Button btnGetPower, btnSetPower, btnGetDeviceID, btnCfFrency, btnGetFrency, btnCfMask, btnGetMask, btnSetRange, btnGetRange;
private EditText etSetPower, edtDeviceID, edtStartFrency, edtFrencyStep, edtFrencyNumber, edtMaskArea, edtMaskStartAddr, edtMaskLen, edtMaskData, edtRange;
private TextView tvGetPower;
private Spinner maskAreaSpinner, spinnerMaskData;
private Toast toast;
private List<String> maskData = new ArrayList<>();
private SpinnerAdapter spinnerAdapter;
public static SettingFragment newInstance(MainActivity1 activity) {
mActivity = activity;
return new SettingFragment();
}
private Callback callback = new Callback();
private static MainActivity1 mActivity;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_setting, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
btnGetPower = view.findViewById(R.id.btn_getPower);
btnSetPower = view.findViewById(R.id.btn_setPower);
etSetPower = view.findViewById(R.id.et_setPower);
tvGetPower = view.findViewById(R.id.tv_getPower);
btnGetDeviceID = view.findViewById(R.id.btn_deviceID);
edtDeviceID = view.findViewById(R.id.et_deviceID);
edtStartFrency = view.findViewById(R.id.edt_startFrency);
edtFrencyStep = view.findViewById(R.id.edt_frencyStep);
edtFrencyNumber = view.findViewById(R.id.edt_frencyNumber);
btnCfFrency = view.findViewById(R.id.btn_configFrency);
btnGetFrency = view.findViewById(R.id.btn_getFrency);
maskAreaSpinner = view.findViewById(R.id.spinner_mask_area);
edtMaskStartAddr = view.findViewById(R.id.edt_maskStartAddr);
edtMaskLen = view.findViewById(R.id.edt_maskLength);
edtMaskData = view.findViewById(R.id.edt_maskData);
btnCfMask = view.findViewById(R.id.btn_configMask);
btnGetMask = view.findViewById(R.id.btn_getMask);
edtRange = view.findViewById(R.id.edt_rangeValue);
btnGetRange = view.findViewById(R.id.btn_getRange);
btnSetRange = view.findViewById(R.id.btn_setRange);
spinnerMaskData = view.findViewById(R.id.spinner_mask_data);
spinnerAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_dropdown_item, maskData);
spinnerMaskData.setAdapter(spinnerAdapter);
initEvents();
}
public static byte[] hexStringToBytes(String hexString) {
hexString = hexString.toLowerCase();
final byte[] byteArray = new byte[hexString.length() >> 1];
int index = 0;
for (int i = 0; i < hexString.length(); i++) {
if (index > hexString.length() - 1) {
return byteArray;
}
byte highDit = (byte) (Character.digit(hexString.charAt(index), 16) & 0xFF);
byte lowDit = (byte) (Character.digit(hexString.charAt(index + 1), 16) & 0xFF);
byteArray[i] = (byte) (highDit << 4 | lowDit);
index += 2;
}
return byteArray;
}
private void initEvents() {
btnGetPower.setOnClickListener(this);
btnSetPower.setOnClickListener(this);
btnGetDeviceID.setOnClickListener(this);
btnCfFrency.setOnClickListener(this);
btnGetFrency.setOnClickListener(this);
btnCfMask.setOnClickListener(this);
btnGetMask.setOnClickListener(this);
btnSetRange.setOnClickListener(this);
btnGetRange.setOnClickListener(this);
}
private void btnGetPower() {
setCallback();
int outputPower = mActivity.mRfidManager.getOutputPower();
tvGetPower.setText(getString(R.string.current_power) + outputPower);
}
private void btnSetPower() {
setCallback();
String str = etSetPower.getText().toString().trim();
if (TextUtils.isEmpty(str)) {
toast(getString(R.string.content_not_null));
return;
}
int power = Integer.parseInt(str);
if (power < 0 || power > 33) {
toast(getString(R.string.power_value_not_allow));
return;
}
int ret = mActivity.mRfidManager.setOutputPower((byte) power);
if (ret != 0) {
toast(getString(R.string.set_power_fail));
} else {
SharedPreferences rfid_demo = getContext().getSharedPreferences("rfid_demo", Context.MODE_PRIVATE);
SharedPreferences.Editor edit = rfid_demo.edit();
edit.putInt("power", power);
edit.apply();
}
}
private void btnGetDeviceID() {
String deviceId = mActivity.mRfidManager.getDeviceId();
edtDeviceID.setText(deviceId + "");
}
private void btnCfFrency() {
String StartFrency = edtStartFrency.getText().toString();
String step = edtFrencyStep.getText().toString();
String number = edtFrencyNumber.getText().toString();
if (StartFrency.equals("") || step.equals("") || number.equals(""))
return;
int i = mActivity.mRfidManager.setCustomRegion((byte) 0, Integer.parseInt(step), Integer.parseInt(number), Integer.parseInt(StartFrency));
if (i == 0) {
toast(getContext().getString(R.string.set_success));
} else {
toast(getContext().getString(R.string.set_fail));
}
}
private void btnGetFrency() {
CustomRegionBean customRegion = mActivity.mRfidManager.getCustomRegion();
RfidDate frequencyRegion = mActivity.mRfidManager.getFrequencyRegion();
if (frequencyRegion != null) {
Log.e(TAG, "onClick: start:" + frequencyRegion.btFrequencyStart + "end:" + frequencyRegion.btFrequencyEnd + "region:" + frequencyRegion.btRegion);
}
if (customRegion != null) {
edtStartFrency.setText(customRegion.StartFre[0] + "");
edtFrencyNumber.setText(customRegion.FreNum[0] + "");
edtFrencyStep.setText(customRegion.FreSpace[0] + "");
} else {
toast(getContext().getString(R.string.get_fail));
}
}
private void btnCfMask() {
int area = maskAreaSpinner.getSelectedItemPosition() + 1;
String startAddr = edtMaskStartAddr.getText().toString().trim();
String len = edtMaskLen.getText().toString().trim();
String data = edtMaskData.getText().toString().trim();
if (startAddr.equals("") || data.equals("")) {
return;
}
int i = mActivity.mRfidManager.addMask(area, Integer.parseInt(startAddr), data.length(), data);
if (i == 0) {
maskData.add(area + "," + startAddr + "," + data);
toast(getContext().getString(R.string.set_success));
} else {
toast(getContext().getString(R.string.set_fail));
}
}
private void btnGetMask() {
int i = mActivity.mRfidManager.clearMask();
if (i == 0) {
edtMaskData.setText("");
edtMaskStartAddr.setText("");
edtMaskLen.setText("");
maskData.clear();
toast("clear successfully");
} else {
toast("clear failed");
}
}
private void btnSetRange() {
String range = edtRange.getText().toString();
if (range.equals("")) {
return;
}
int i = mActivity.mRfidManager.setRange(Integer.parseInt(range));
if (i == 0) {
toast(getContext().getString(R.string.set_success));
} else {
toast(getContext().getString(R.string.set_fail));
}
}
private void btnGetRange() {
int range1 = mActivity.mRfidManager.getRange();
if (range1 != -1) {
edtRange.setText(range1 + "");
} else {
toast(getContext().getString(R.string.get_fail));
}
}
@Override
public void onClick(View view) {
if (mActivity.mRfidManager == null) {
toast(getString(R.string.rfid_not_init));
return;
}
if (view == btnGetPower) {
btnGetPower();
} else if (view == btnSetPower) {
btnSetPower();
} else if (view == btnGetDeviceID) {
btnGetDeviceID();
} else if (view == btnCfFrency) {
btnCfFrency();
} else if (view == btnGetFrency) {
btnGetFrency();
} else if (view == btnCfMask) {
btnCfMask();
} else if (view == btnGetMask) {
btnGetMask();
} else if (view == btnSetRange) {
btnSetRange();
} else if (view == btnGetRange) {
btnGetRange();
}
}
private class Callback implements IRfidCallback {
@Override
public void onInventoryTag(String EPC, String TID, String strRSSI) {
}
@Override
public void onInventoryTagEnd() {
}
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
setCallback();
}
}
private void setCallback() {
if (mActivity.RFID_INIT_STATUS) {
if (mActivity.mRfidManager != null) {
if (callback == null) {
callback = new Callback();
}
mActivity.mRfidManager.registerCallback(callback);
}
}
}
private void toast(final String message) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
ToastUtil.showShort(message);
}
});
}
}
\ No newline at end of file
package com.sxyz.rfid.ui.ui.main;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.sxyz.rfid.App;
import com.sxyz.rfid.R;
import com.sxyz.rfid.ui.MainActivity;
import com.sxyz.rfid.ui.MainActivity1;
import com.sxyz.rfid.utils.ByteUtils;
import com.sxyz.rfid.utils.ToastUtil;
import com.ubx.usdk.util.SoundTool;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
/**
* A simple {@link Fragment} subclass.
* Use the {@link TagManageFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class TagManageFragment extends Fragment {
public static final String TAG = TagManageFragment.class.getSimpleName();
/**
* (0x00:RESERVED, 0x01:EPC, 0x02:TID, 0x03:USER)
*/
private int btMemBank;
private ManageListAdapterRv manageListAdapterRv;
private static MainActivity1 mActivity;
private ArrayAdapter epcArrayAdapter;
private List<com.sxyz.courtai.ui.pojo.TagManage> data;
private HashMap<String, com.sxyz.courtai.ui.pojo.TagManage> map = new HashMap<>();
private RecyclerView manageListRv;
private Spinner manageBankSpinner, manageEpcDatasSpinner;
private TextView tvChoiceEpcTid;
private EditText manageWriteEdit, manageCntEdit, manageAddressEdit, managePasswordEdit;
private Button manageReadBtn, manageWriteBtn;
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @return A new instance of fragment TagManageFragment.
*/
// TODO: Rename and change types and number of parameters
public static TagManageFragment newInstance(MainActivity1 activity) {
mActivity = activity;
TagManageFragment fragment = new TagManageFragment();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_tag_manage, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
manageListRv = view.findViewById(R.id.manage_list_rv);
manageBankSpinner = view.findViewById(R.id.manage_bank_spinner);
manageEpcDatasSpinner = view.findViewById(R.id.manage_epc_datas_spinner);
manageCntEdit = view.findViewById(R.id.manage_cnt_edit);
manageAddressEdit = view.findViewById(R.id.manage_address_edit);
managePasswordEdit = view.findViewById(R.id.manage_password_edit);
tvChoiceEpcTid = view.findViewById(R.id.tv_choice_epc_tid);
manageWriteEdit = view.findViewById(R.id.manage_write_edit);
manageReadBtn = view.findViewById(R.id.manage_read_btn);
manageWriteBtn = view.findViewById(R.id.manage_write_btn);
manageListRv.setLayoutManager(new LinearLayoutManager(getActivity(), RecyclerView.VERTICAL, false));
manageListRv.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL));
manageListAdapterRv = new ManageListAdapterRv(null, getActivity());
manageListRv.setAdapter(manageListAdapterRv);
initEvents();
}
@Override
public void onStart() {
super.onStart();
}
private void initEvents() {
manageBankSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 0:
btMemBank = 0x00;
break;
case 1:
btMemBank = 0x01;
break;
case 2:
btMemBank = 0x02;
break;
case 3:
btMemBank = 0x03;
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
manageBankSpinner.setSelection(1, true);
epcArrayAdapter = new ArrayAdapter(mActivity, android.R.layout.simple_spinner_dropdown_item, mActivity.tagScanSpinner) {
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
convertView = View.inflate(getActivity(), R.layout.spinner_epc_tid_item, null);//获得Spinner布局View
if (convertView != null) {
TextView tvEpc = convertView.findViewById(R.id.sp_epc_item);
TextView tvTid = convertView.findViewById(R.id.sp_tid_item);
try {
String epc = mActivity.tagScanSpinner.get(position).getEpc();
// String tid = mActivity.tagScanSpinner.get(position).getTid();
tvEpc.setText("EPC:" + epc);
// tvTid.setText("TID:"+tid);
tvTid.setVisibility(View.INVISIBLE);
} catch (Exception e) {
}
}
return convertView;
}
};
//给Spinner set适配器
manageEpcDatasSpinner.setAdapter(epcArrayAdapter);
manageEpcDatasSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override//重写Item被选择的事件
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
List<com.sxyz.courtai.ui.pojo.TagScan> datas = mActivity.tagScanSpinner;
if (datas != null && datas.size() > 0) {
com.sxyz.courtai.ui.pojo.TagScan tagScan = datas.get(position);
String tid = tagScan.getTid().replace(" ", "");
if (!TextUtils.isEmpty(tid)) {
} else {
}
String epc = tagScan.getEpc().replace(" ", "");
tvChoiceEpcTid.setText(epc);
manageWriteEdit.setText(epc + "");
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
tvChoiceEpcTid.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
manageEpcDatasSpinner.performClick();
}
});
manageReadBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mActivity.mRfidManager == null) {
toast(getString(R.string.rfid_not_init));
return;
}
String s_epc = tvChoiceEpcTid.getText().toString().trim();
String strPwd = managePasswordEdit.getText().toString();
String s_address = manageAddressEdit.getText().toString();
String s_length = manageCntEdit.getText().toString();
if (s_epc.equals("") || strPwd.equals("") || s_address.equals("") || s_length.equals("")) {
toast("Please fill in the parameters first.");
return;
}
map.clear();
byte cnt = Integer.valueOf(s_length).byteValue();
byte address = Integer.valueOf(s_address).byteValue();
byte[] pwd = ByteUtils.hexStringToBytes(strPwd);
int mem = manageBankSpinner.getSelectedItemPosition();
Log.d(TAG, "initEvents: epc:" + s_epc + " cnt = " + cnt + ", address = " + address + ", strPwd = " + Arrays.toString(ByteUtils.hexStringToBytes(strPwd)) + ", pwd" + Arrays.toString(pwd));
String dataRead = mActivity.mRfidManager.readTag(s_epc, (byte) mem, address, cnt, pwd);
Log.e(TAG, "onClick: ......");
if (TextUtils.isEmpty(dataRead)) {
Log.e(TAG, "onClick: ......");
toast("read tag fail");
} else {
toast("read tag success");
readTag(s_epc, dataRead);
}
//1fb1f280951t
}
});
manageWriteBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d(TAG, "initEvents: read tag");
if (mActivity.mRfidManager == null) {
toast(getString(R.string.rfid_not_init));
return;
}
//map.clear();
String s_epc = tvChoiceEpcTid.getText().toString().trim();
String s_pwd = managePasswordEdit.getText().toString();
String s_address = manageAddressEdit.getText().toString();
String s_length = manageCntEdit.getText().toString();
if (s_epc.equals("") || s_pwd.equals("") || s_address.equals("") || s_length.equals("")) {
toast("Please fill in the parameters first.");
return;
}
byte[] pwd = ByteUtils.hexStringToBytes(managePasswordEdit.getText().toString());
int add = Integer.parseInt(manageAddressEdit.getText().toString());
int cnt = Integer.parseInt(manageCntEdit.getText().toString());
String dataEd = manageWriteEdit.getText().toString();
if (TextUtils.isEmpty(dataEd)) {
toast(getString(R.string.write_epc_first));
return;
}
String data = dataEd.replaceAll(" ", "");
if (data.length() % 4 != 0) {//TODO data 长度不够4的倍数,后面自动补0
int less = data.length() % 4;
for (int i = 0; i < 4 - less; i++) {
data = data + "0";
}
}
byte[] d = ByteUtils.hexStringToBytes(data);
int mem = manageBankSpinner.getSelectedItemPosition();
Log.e(TAG, "onClick: epc:" + s_epc + " mem:" + mem + " address:" + add + " data:" + data + "len:" + d.length / 2);
int i = mActivity.mRfidManager.writeTag(s_epc, pwd, (byte) mem, (byte) add, (byte) (d.length / 2), d);
if (i == 0) {
toast("Data was written successfully");
SoundTool.getInstance(App.getContext()).playBeep(1);
} else {
toast("Data write failed " + i);
}
}
});
}
private void readTag(final String epc, final String tid) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
{
if (!map.containsKey(epc)) {
com.sxyz.courtai.ui.pojo.TagManage tagManage = new com.sxyz.courtai.ui.pojo.TagManage(epc, "", tid, "", false);
map.put(epc, tagManage);
} else {
com.sxyz.courtai.ui.pojo.TagManage tagManage = map.get(epc);
tagManage.setData(tid);
map.put(epc, tagManage);
}
data = new ArrayList<>(map.values());
Log.d(TAG, "onOperationTag: data = " + Arrays.toString(data.toArray()));
manageListAdapterRv.setData(data);
SoundTool.getInstance(App.getContext()).playBeep(1);
}
}
});
}
private void write(final String epc, final String tid) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
{
if (!map.containsKey(epc)) {
com.sxyz.courtai.ui.pojo.TagManage tagManage = new com.sxyz.courtai.ui.pojo.TagManage(epc, "", tid, "", false);
map.put(epc, tagManage);
} else {
com.sxyz.courtai.ui.pojo.TagManage tagManage = map.get(epc);
tagManage.setData(tid);
map.put(epc, tagManage);
}
data = new ArrayList<>(map.values());
Log.d(TAG, "onOperationTag: data = " + Arrays.toString(data.toArray()));
manageListAdapterRv.setData(data);
}
}
});
}
private void toast(final String message) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
ToastUtil.showShort(message);
}
});
}
@Override
public void onResume() {
super.onResume();
if (mActivity.tagScanSpinner.size() != 0) {
manageEpcDatasSpinner.setSelection(0);
}
}
@Override
public void onPause() {
super.onPause();
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
manageBankSpinner.setSelection(1);
if (mActivity.tagScanSpinner.size() > 0) {
manageEpcDatasSpinner.setSelection(0);
tvChoiceEpcTid.setText(mActivity.tagScanSpinner.get(0).getEpc());
manageWriteEdit.setText(mActivity.tagScanSpinner.get(0).getEpc() + "");
}
epcArrayAdapter.notifyDataSetChanged();
} else {
}
}
}
\ No newline at end of file
package com.sxyz.rfid.ui.ui.main;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.sxyz.rfid.App;
import com.sxyz.rfid.R;
import com.sxyz.rfid.ui.MainActivity;
import com.sxyz.rfid.ui.MainActivity1;
import com.ubx.usdk.bean.RfidParameter;
import com.ubx.usdk.rfid.aidl.IRfidCallback;
import com.ubx.usdk.util.SoundTool;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* A simple {@link Fragment} subclass.
* Use the {@link TagScanFragment#newInstance} factory method to
* create an instance of this fragment.
*/
public class TagScanFragment extends Fragment {
public static final String TAG = "usdk-" + TagScanFragment.class.getSimpleName();
private List<com.sxyz.courtai.ui.pojo.TagScan> data;
private HashMap<String, com.sxyz.courtai.ui.pojo.TagScan> mapData;
private ScanCallback callback;
private ScanListAdapterRv scanListAdapterRv;
private static MainActivity1 mActivity;
private int tagTotal = 0;
private int errorCount = 0;
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @return A new instance of fragment ScanFragment.
*/
// TODO: Rename and change types and number of parameters
public static TagScanFragment newInstance(MainActivity1 activity) {
mActivity = activity;
TagScanFragment fragment = new TagScanFragment();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_tag_scan, container, false);
}
public Button scanStartBtn;
private RecyclerView scanListRv;
private TextView scanCountText, scanTotalText;
public TextView textFirmware;
private Spinner spinnerMode;
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
spinnerMode = view.findViewById(R.id.spinner_inventory_mode);
scanStartBtn = view.findViewById(R.id.scan_start_btn);
scanListRv = view.findViewById(R.id.scan_list_rv);
scanCountText = view.findViewById(R.id.scan_count_text);
scanTotalText = view.findViewById(R.id.scan_total_text);
textFirmware = view.findViewById(R.id.text_firmware);
scanStartBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mActivity.RFID_INIT_STATUS) {
if (scanStartBtn.getText().equals(getString(R.string.btInventory))) {
setCallback();
scanStartBtn.setText(getString(R.string.btn_stop_Inventory));
setScanStatus(true);
} else {
scanStartBtn.setText(getString(R.string.btInventory));
setScanStatus(false);
}
} else {
Log.d(TAG, "scanStartBtn RFID未初始化 ");
Toast.makeText(getActivity(), "RFID Not initialized", Toast.LENGTH_SHORT).show();
}
}
});
mapData = new HashMap<>();
spinnerMode.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (mActivity.mRfidManager != null) {
mActivity.mRfidManager.setQueryMode(position);
if (position == 1) {
// SystemClock.sleep(10);
// RfidParameter rfidParameter = mActivity.mRfidManager.getInventoryParameter();
// rfidParameter.IvtType = 1;
// rfidParameter.Memory = 0x02;
// rfidParameter.WordPtr = 0x00;
// rfidParameter.Length = 4;
// mActivity.mRfidManager.setInventoryParameter(rfidParameter);
}
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
);
scanListRv.setLayoutManager(new LinearLayoutManager(getActivity(), RecyclerView.VERTICAL, false));
scanListRv.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL));
scanListAdapterRv = new ScanListAdapterRv(null, getActivity());
scanListRv.setAdapter(scanListAdapterRv);
containerMap();
}
private final int MSG_UPDATE_UI = 0;
private final int MSG_STOP_INVENTORY = 1;
private final int MSG_UPDATE_SINGLE_INV = 2;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case MSG_UPDATE_UI:
scanListAdapterRv.notifyDataSetChanged();
handlerUpdateUI();
break;
case MSG_STOP_INVENTORY:
scanListAdapterRv.notifyDataSetChanged();
mHandler.removeCallbacksAndMessages(null);
if (scanStartBtn.getText().equals(getString(R.string.btn_stop_Inventory))) {
scanStartBtn.setText(getContext().getString(R.string.btInventory));
}
break;
case MSG_UPDATE_SINGLE_INV:
mActivity.mRfidManager.inventorySingle();
mHandler.sendEmptyMessageDelayed(MSG_UPDATE_SINGLE_INV, 200);
break;
}
}
};
@Override
public void onStart() {
super.onStart();
}
private void setScanStatus(boolean isScan) {
if (isScan) {
tagTotal = 0;
// if (mapData != null) {
// mapData.clear();
// }
// if (mActivity.mDataParents != null) {
// mActivity.mDataParents.clear();
// }
// if (mActivity.tagScanSpinner != null) {
// mActivity.tagScanSpinner.clear();
// }
// if (data != null) {
// data.clear();
// scanListAdapterRv.setData(data);
// }
Log.v(TAG, "--- startInventory() ----");
handlerUpdateUI();
inventorySingle();// inventorySingle();//读单个标签
// mActivity.mRfidManager.startRead();//少量标签盘点建议使用:0;盘点标签超过 100-200建议使用:1.
// startRead4or6TID();
// mHandler.sendEmptyMessageDelayed(MSG_UPDATE_SINGLE_INV,200);
} else {
Log.v(TAG, "--- stopInventory() ----");
mActivity.mRfidManager.stopInventory();
// stopRead4or6TID();
// mHandler.removeCallbacksAndMessages(null);
handlerStopUI();
}
}
private void handlerUpdateUI() {
if (mHandler != null) {
mHandler.sendEmptyMessageDelayed(MSG_UPDATE_UI, 500);
}
}
private void handlerStopUI() {
if (mHandler != null) {
mHandler.sendEmptyMessageDelayed(MSG_STOP_INVENTORY, 200);
}
}
private long time = 0l;
/**
* 单个读取EPC 或tid
*/
private void inventorySingle() {
mActivity.mRfidManager.inventorySingle();
if (mHandler != null) {
mHandler.sendEmptyMessageDelayed(MSG_STOP_INVENTORY, 10);
}
}
/**
* 设置掩码(标签过滤盘存)
*/
private void setTagMask() {
mActivity.mRfidManager.addMask(2, 24, 16, "7020");
}
/**
* 通过TID写入标签数据
*
* @param TID 选中的TID
* @param Mem 标签区域:0-密码区,前2个字是销毁密码,后2个字是访问密码 1-EPC区 2-TID区 3-用户区
* @param WordPtr 写入的起始字地址
* @param pwd 密码
* @param datas 待写入数据
*/
private void writeTagByTid(String TID, byte Mem, byte WordPtr, byte[] pwd, String datas) {
// String TID = "E280110C20007642903D094D";
// byte[] pwd = hexStringToBytes("00000000");
// String datas = "1111111111111111";
int ret = mActivity.mRfidManager.writeTagByTid(TID, (byte) 1, (byte) 2, pwd, datas);
if (ret == -6) {
Toast.makeText(mActivity, getContext().getString(R.string.gj_no_support), Toast.LENGTH_SHORT).show();
}
}
/**
* 随机对一张标签写入EPC
*
* @param epc 待写入的EPC值 16进制字符串
* @param password 标签访问密码
*/
private void writeEpcString(String epc, String password) {
mActivity.mRfidManager.writeEpcString(epc, password);
}
class ScanCallback implements IRfidCallback {
@Override
public void onInventoryTag(String EPC, final String TID, final String strRSSI) {
notiyDatas(EPC, TID, strRSSI);
// dealDatas(EPC, TID, strRSSI);
Log.e(TAG, "onInventoryTag:............... epc:" + EPC + " tid:" + TID);
}
/**
* 盘存结束回调(Inventory Command Operate End)
*/
@Override
public void onInventoryTagEnd() {
Log.i(TAG, "OendO onInventoryTagEnd() " + inventoryIng);
Log.d(TAG, "onInventoryTagEnd()");
// if (typeInventory == 0){
// read4Tid();
// }else if (typeInventory == 1){
// read6Tid();
// }
}
}
private void notiyDatas(String s2, String TID, final String strRSSI) {
final String mapContainStrFinal = s2 + TID;
Log.d(TAG, "onInventoryTag: EPC: " + s2);
SoundTool.getInstance(App.getContext()).playBeep(1);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
{
if (mapData.containsKey(mapContainStrFinal)) {
com.sxyz.courtai.ui.pojo.TagScan tagScan = mapData.get(mapContainStrFinal);
tagScan.setCount(mapData.get(mapContainStrFinal).getCount() + 1);
// tagScan.setTid(TID);
tagScan.setRssi(strRSSI);
mapData.put(mapContainStrFinal, tagScan);
} else {
mActivity.mDataParents.add(s2);
com.sxyz.courtai.ui.pojo.TagScan tagScan = new com.sxyz.courtai.ui.pojo.TagScan(s2, TID, strRSSI, 1);
mapData.put(mapContainStrFinal, tagScan);
mActivity.tagScanSpinner.add(tagScan);
}
scanTotalText.setText(++tagTotal + "");
data = new ArrayList<>(mapData.values());
// Log.d(TAG, "onInventoryTag: data = " + Arrays.toString(data.toArray()));
scanListAdapterRv.setData(data);
scanCountText.setText(mapData.keySet().size() + "");
/*long nowTime = System.currentTimeMillis();
if ((nowTime - time)>500){
time = nowTime;
data = new ArrayList<>(mapData.values());
// Log.d(TAG, "onInventoryTag: data = " + Arrays.toString(data.toArray()));
scanListAdapterRv.setData(data);
}*/
}
}
});
}
@Override
public void onResume() {
super.onResume();
Log.e(TAG, "onResume: ........");
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
setCallback();
} else {
if (mActivity.mRfidManager != null) {
scanStartBtn.setText(getContext().getString(R.string.btInventory));
setScanStatus(false);
}
// Log.e(TAG, "setUserVisibleHint: 扫描释放声音资源..........." );
// SoundTool.getInstance(BaseApplication.getContext()).release();
}
}
@Override
public void onPause() {
super.onPause();
Log.e(TAG, "onPause: ........");
if (mActivity.mRfidManager != null) {
setScanStatus(false);
}
}
@Override
public void onStop() {
super.onStop();
Log.e(TAG, "onStop: .........");
}
public void setCallback() {
if (mActivity.mRfidManager != null) {
if (callback == null) {
callback = new ScanCallback();
}
mActivity.mRfidManager.registerCallback(callback);
}
}
/**
* 将Hex String转换为Byte数组
*
* @param hexString the hex string
* @return the byte [ ]
*/
public static byte[] hexStringToBytes(String hexString) {
hexString = hexString.toLowerCase();
final byte[] byteArray = new byte[hexString.length() >> 1];
int index = 0;
for (int i = 0; i < hexString.length(); i++) {
if (index > hexString.length() - 1) {
return byteArray;
}
byte highDit = (byte) (Character.digit(hexString.charAt(index), 16) & 0xFF);
byte lowDit = (byte) (Character.digit(hexString.charAt(index + 1), 16) & 0xFF);
byteArray[i] = (byte) (highDit << 4 | lowDit);
index += 2;
}
return byteArray;
}
//------------------------------------------------------------------------
private HashMap<String, Integer> hashMap4wei = new HashMap<>();
private void containerMap() {
hashMap4wei.put("E2006003", 4);
hashMap4wei.put("E2006004", 4);
hashMap4wei.put("E282403B", 4);
hashMap4wei.put("E282402D", 4);
hashMap4wei.put("E200B080", 4);
}
private void dealDatas(String epc, String tid, String rssi) {
if (!TextUtils.isEmpty(tid)) {
int length = tid.length();
if (length == 16) {
String sub = tid.substring(0, 8);
if (hashMap4wei.containsKey(sub)) {//TODO 说明是4位长标签,数据可用,返回到上层
notiyDatas(epc, tid, rssi);
} else {//TODO 说明不是4位长标签,数据不可用,不作处理
}
} else if (length == 24) {
notiyDatas(epc, tid, rssi);
} else {
notiyDatas(epc, tid, rssi);
}
} else {
notiyDatas(epc, tid, rssi);
}
}
private boolean inventoryIng = false;//是否正在盘点
private int typeInventory = 0;//0:6位, 1:4位
private void read4Tid() {
if (inventoryIng) {
typeInventory = 1;
RfidParameter rfidParameter = mActivity.mRfidManager.getInventoryParameter();
rfidParameter.IvtType = 1;
rfidParameter.Memory = 0x02;
rfidParameter.WordPtr = 0x00;
rfidParameter.Session = 1;
rfidParameter.Length = 4;
mActivity.mRfidManager.setInventoryParameter(rfidParameter);
Log.i(TAG, "tid 4");
handler.sendEmptyMessageDelayed(MSG_4_TID, 70);
}
}
private void read6Tid() {
if (inventoryIng) {
typeInventory = 0;
RfidParameter rfidParameter = mActivity.mRfidManager.getInventoryParameter();
rfidParameter.IvtType = 1;
rfidParameter.Memory = 0x02;
rfidParameter.WordPtr = 0x00;
rfidParameter.Session = 1;
rfidParameter.Length = 6;
mActivity.mRfidManager.setInventoryParameter(rfidParameter);
Log.i(TAG, "tid 6");
handler.sendEmptyMessageDelayed(MSG_6_TID, 70);
}
}
private void startRead4or6TID() {
inventoryIng = true;
read6Tid();
}
private void stopRead4or6TID() {
inventoryIng = false;
if (handler != null) {
handler.sendEmptyMessage(MSG_STOP);
}
}
private final int MSG_4_TID = 0;
private final int MSG_6_TID = 1;
private final int MSG_STOP = 2;
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (msg.what == MSG_4_TID) {
if (inventoryIng) {
mActivity.mRfidManager.startRead();
handler.sendEmptyMessageDelayed(MSG_STOP, 800);
}
} else if (msg.what == MSG_6_TID) {
if (inventoryIng) {
mActivity.mRfidManager.startRead();
handler.sendEmptyMessageDelayed(MSG_STOP, 600);
}
} else if (msg.what == MSG_STOP) {
Log.i(TAG, "OendO stopInventory()");
handler.removeCallbacksAndMessages(null);
mActivity.mRfidManager.stopInventory();
}
}
};
}
\ No newline at end of file
package com.sxyz.rfid.ui.ui.main;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.sxyz.rfid.App;
import com.sxyz.rfid.R;
import com.sxyz.rfid.ui.MainActivity;
import com.sxyz.rfid.ui.MainActivity1;
import com.sxyz.rfid.utils.ByteUtils;
import com.ubx.usdk.RFIDSDKManager;
import com.ubx.usdk.rfid.aidl.IRfidCallback;
import com.ubx.usdk.util.SoundTool;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
* A simple {@link Fragment} subclass.
* Use the {@link TagScanFragmentNew#newInstance} factory method to
* create an instance of this fragment.
*/
public class TagScanFragmentNew extends Fragment {
public static final String TAG = "usdk-" + TagScanFragmentNew.class.getSimpleName();
private List<com.sxyz.courtai.ui.pojo.TagScan> data;
private HashMap<String, com.sxyz.courtai.ui.pojo.TagScan> mapData;
private ScanCallback callback;
private ScanListAdapterRv scanListAdapterRv;
private static MainActivity1 mActivity;
private int tagTotal = 0;
private int errorCount = 0;
/**
* Use this factory method to create a new instance of
* this fragment using the provided parameters.
*
* @return A new instance of fragment ScanFragment.
*/
// TODO: Rename and change types and number of parameters
public static TagScanFragmentNew newInstance(MainActivity1 activity) {
mActivity = activity;
TagScanFragmentNew fragment = new TagScanFragmentNew();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_tag_scan, container, false);
}
public Button scanStartBtn, clearBtn;
private RecyclerView scanListRv;
private TextView scanCountText, scanTotalText;
public TextView textFirmware;
private Spinner spinnerMode;
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
spinnerMode = view.findViewById(R.id.spinner_inventory_mode);
scanStartBtn = view.findViewById(R.id.scan_start_btn);
clearBtn = view.findViewById(R.id.btn_clear);
scanListRv = view.findViewById(R.id.scan_list_rv);
scanCountText = view.findViewById(R.id.scan_count_text);
scanTotalText = view.findViewById(R.id.scan_total_text);
textFirmware = view.findViewById(R.id.text_firmware);
scanStartBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (mActivity.RFID_INIT_STATUS) {
if (scanStartBtn.getText().equals(getString(R.string.btInventory))) {
setCallback();
scanStartBtn.setText(getString(R.string.btn_stop_Inventory));
setScanStatus(true);
} else {
scanStartBtn.setText(getString(R.string.btInventory));
setScanStatus(false);
}
} else {
Log.d(TAG, "scanStartBtn RFID未初始化 ");
Toast.makeText(getActivity(), "RFID Not initialized", Toast.LENGTH_SHORT).show();
}
}
});
clearBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
tagTotal = 0;
if (mapData != null) {
mapData.clear();
}
if (mActivity.mDataParents != null) {
mActivity.mDataParents.clear();
}
if (mActivity.tagScanSpinner != null) {
mActivity.tagScanSpinner.clear();
}
if (data != null) {
data.clear();
scanListAdapterRv.setData(data);
}
showView();
}
});
mapData = new HashMap<>();
spinnerMode.setOnItemSelectedListener(
new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
if (RFIDSDKManager.getInstance().getRfidManager() != null) {
RFIDSDKManager.getInstance().getRfidManager().setQueryMode(position);
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
);
scanListRv.setLayoutManager(new LinearLayoutManager(getActivity(), RecyclerView.VERTICAL, false));
scanListRv.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL));
scanListAdapterRv = new ScanListAdapterRv(null, getActivity());
scanListRv.setAdapter(scanListAdapterRv);
}
private final int MSG_UPDATE_UI = 0;
private final int MSG_STOP_INVENTORY = 1;
private final int MSG_UPDATE_SINGLE_INV = 2;
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case MSG_UPDATE_UI:
scanListAdapterRv.notifyDataSetChanged();
handlerUpdateUI();
break;
case MSG_STOP_INVENTORY:
scanListAdapterRv.notifyDataSetChanged();
mHandler.removeCallbacksAndMessages(null);
if (scanStartBtn.getText().equals(mActivity.getString(R.string.btn_stop_Inventory))) {
scanStartBtn.setText(getContext().getString(R.string.btInventory));
}
break;
case MSG_UPDATE_SINGLE_INV:
RFIDSDKManager.getInstance().getRfidManager().inventorySingle();
mHandler.sendEmptyMessageDelayed(MSG_UPDATE_SINGLE_INV, 200);
break;
}
}
};
@Override
public void onStart() {
super.onStart();
}
private void setScanStatus(boolean isScan) {
if (isScan) {
Log.v(TAG, "--- startInventory() ----");
handlerUpdateUI();
try {
RFIDSDKManager.getInstance().getRfidManager().startRead();//少量标签盘点建议使用:0;盘点标签超过 100-200建议使用:1.
} catch (Exception e) {
e.printStackTrace();
}
} else {
Log.v(TAG, "--- stopInventory() ----");
if (RFIDSDKManager.getInstance().getRfidManager() != null) {
RFIDSDKManager.getInstance().getRfidManager().stopInventory();
}
handlerStopUI();
}
}
/**
* 控制A/B面读取
*/
private void myScan() {
// int ret = RFIDSDKManager.getInstance().getRfidManager().inventoryOnce((byte)1,(byte)4,(byte)0,(byte)6,(byte)0,(byte)50);//自定义扫描
// Log.v(TAG, " inventoryOnce() ret == "+ret);
byte[] readAdr = new byte[]{0x00, 0x00};//固定2字节,第一个字节是高位,第2字节是低位
int ret = RFIDSDKManager.getInstance().getRfidManager().inventoryOnceMix((byte) 1, (byte) 4, (byte) 0, (byte) 50, (byte) 2, readAdr, (byte) 6, ByteUtils.hexStringToBytes("00000000"));//自定义扫描
Log.v(TAG, " InventoryOnceMix() ret == " + ret);
}
private void handlerUpdateUI() {
if (mHandler != null) {
mHandler.sendEmptyMessageDelayed(MSG_UPDATE_UI, 500);
}
}
private void handlerStopUI() {
if (mHandler != null) {
mHandler.sendEmptyMessageDelayed(MSG_STOP_INVENTORY, 200);
}
}
private long time = 0l;
/**
* 单个读取EPC 或tid
*/
private void inventorySingle() {
RFIDSDKManager.getInstance().getRfidManager().inventorySingle();
if (mHandler != null) {
mHandler.sendEmptyMessageDelayed(MSG_STOP_INVENTORY, 10);
}
}
/**
* 设置掩码(标签过滤盘存)
*/
private void setTagMask() {
RFIDSDKManager.getInstance().getRfidManager().addMask(2, 24, 16, "7020");
}
/**
* 通过TID写入标签数据
*
* @param TID 选中的TID
* @param Mem 标签区域:0-密码区,前2个字是销毁密码,后2个字是访问密码 1-EPC区 2-TID区 3-用户区
* @param WordPtr 写入的起始字地址
* @param pwd 密码
* @param datas 待写入数据
*/
private void writeTagByTid(String TID, byte Mem, byte WordPtr, byte[] pwd, String datas) {
// String TID = "E280110C20007642903D094D";
// byte[] pwd = hexStringToBytes("00000000");
// String datas = "1111111111111111";
int ret = RFIDSDKManager.getInstance().getRfidManager().writeTagByTid(TID, (byte) 1, (byte) 2, pwd, datas);
if (ret == -6) {
Toast.makeText(mActivity, getContext().getString(R.string.gj_no_support), Toast.LENGTH_SHORT).show();
}
}
/**
* 随机对一张标签写入EPC
*
* @param epc 待写入的EPC值 16进制字符串
* @param password 标签访问密码
*/
private void writeEpcString(String epc, String password) {
RFIDSDKManager.getInstance().getRfidManager().writeEpcString(epc, password);
}
class ScanCallback implements IRfidCallback {
@Override
public void onInventoryTag(String EPC, final String TID, final String strRSSI) {
Log.e(TAG, "onInventoryTag:............... epc:" + EPC + " tid:" + TID);
notiyDatas(EPC, TID, strRSSI);
}
/**
* 盘存结束回调(Inventory Command Operate End)
*/
@Override
public void onInventoryTagEnd() {
Log.d(TAG, "onInventoryTagEnd()");
}
}
int num = 0;
private void notiyDatas(String s2, String TID, final String strRSSI) {
final String mapContainStrFinal = s2 + TID;
Log.d(TAG, "onInventoryTag: EPC: " + s2);
SoundTool.getInstance(App.getContext()).playBeep(1);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
{
if (mapData.containsKey(mapContainStrFinal)) {
com.sxyz.courtai.ui.pojo.TagScan tagScan = mapData.get(mapContainStrFinal);
tagScan.setCount(mapData.get(mapContainStrFinal).getCount() + 1);
// tagScan.setTid(TID);
tagScan.setRssi(strRSSI);
mapData.put(mapContainStrFinal, tagScan);
} else {
mActivity.mDataParents.add(s2);
com.sxyz.courtai.ui.pojo.TagScan tagScan = new com.sxyz.courtai.ui.pojo.TagScan(s2, TID, strRSSI, 1);
mapData.put(mapContainStrFinal, tagScan);
mActivity.tagScanSpinner.add(tagScan);
}
tagTotal++;
data = new ArrayList<>(mapData.values());
// Log.d(TAG, "onInventoryTag: data = " + Arrays.toString(data.toArray()));
showView();
/*long nowTime = System.currentTimeMillis();
if ((nowTime - time)>500){
time = nowTime;
data = new ArrayList<>(mapData.values());
// Log.d(TAG, "onInventoryTag: data = " + Arrays.toString(data.toArray()));
scanListAdapterRv.setData(data);
}*/
}
}
});
}
private void showView() {
scanTotalText.setText(tagTotal + "");
scanListAdapterRv.setData(data);
scanCountText.setText(mapData.keySet().size() + "");
}
@Override
public void onResume() {
super.onResume();
Log.e(TAG, "onResume: ........");
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
setCallback();
} else {
if (RFIDSDKManager.getInstance().getRfidManager() != null) {
scanStartBtn.setText(getContext().getString(R.string.btInventory));
setScanStatus(false);
}
// Log.e(TAG, "setUserVisibleHint: 扫描释放声音资源..........." );
// SoundTool.getInstance(BaseApplication.getContext()).release();
}
}
@Override
public void onPause() {
super.onPause();
Log.e(TAG, "onPause: ........");
if (RFIDSDKManager.getInstance().getRfidManager() != null) {
setScanStatus(false);
}
}
public void setCallback() {
if (RFIDSDKManager.getInstance().getRfidManager() != null) {
if (callback == null) {
callback = new ScanCallback();
}
RFIDSDKManager.getInstance().getRfidManager().registerCallback(callback);
}
}
//-----------------------------------------
}
\ No newline at end of file
package com.sxyz.rfid.utils;
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
import com.sxyz.rfid.R;
/**音效工具类
* Created by KuCoffee on 2018/2/2.
*/
public class SoundTool {
protected static volatile SoundTool instance;
protected final int SOUND_SWIPE_CARD;
protected final int SOUND_SWIPE_FACE;
protected SoundPool soundPool;
private SoundTool(Context context) {
soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 1);
SOUND_SWIPE_CARD = soundPool.load(context, R.raw.scan_buzzer, 1);
SOUND_SWIPE_FACE = soundPool.load(context,R.raw.scan_new,1);
}
public static synchronized SoundTool getInstance(Context context) {
if(instance == null) {
instance = new SoundTool(context);
}
return instance;
}
public void release(){
if (soundPool != null) {
soundPool.release();
soundPool = null;
instance = null;
}
}
public void playBeep(int mode) {
switch (mode){
case 0:
return;
case 1:
soundPool.play(SOUND_SWIPE_CARD, 1, 1, 1, 0, 1);
break;
case 2:
soundPool.play(SOUND_SWIPE_FACE, 1, 1, 1, 0, 1);
}
}
// /**
// * 播放刷脸声音
// */
// public void playBeepShort() {
// soundPool.play(SOUND_SWIPE_FACE, 1, 1, 1, 0, 1);
// }
}
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="0dip"
android:layout_height="wrap_content"
android:gravity="right"
android:layout_gravity="center"
android:layout_weight="1"
android:text="@string/info_result" />
<TextView
android:id="@+id/b_result"
android:layout_weight="2"
android:layout_width="0dip"
android:layout_gravity="center"
android:textSize="20dp"
android:textColor="#cc0000"
android:gravity="center"
android:layout_height="@dimen/rm_6c_et_height"/>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="0dip"
android:layout_height="wrap_content"
android:gravity="right"
android:layout_gravity="center"
android:layout_weight="1"
android:text="@string/txtepc" />
<Spinner
android:id="@+id/b_spinner"
android:layout_width="0dip"
android:layout_height="@dimen/rm_6c_et_height"
android:layout_weight="2"
android:gravity="left" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="0dip"
android:layout_height="wrap_content"
android:gravity="right"
android:layout_gravity="center"
android:layout_weight="1"
android:text="@string/memptr" />
<EditText
android:id="@+id/et_wordptr"
android:layout_width="0dip"
android:layout_height="@dimen/rm_6c_et_height"
android:layout_weight="2"
android:inputType="numberSigned"
android:text="8"
android:gravity="left" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="0dip"
android:layout_height="wrap_content"
android:gravity="right"
android:layout_gravity="center"
android:layout_weight="1"
android:text="@string/memlen" />
<EditText
android:id="@+id/et_length"
android:layout_width="0dip"
android:layout_height="@dimen/rm_6c_et_height"
android:layout_weight="2"
android:inputType="numberSigned"
android:text="6"
android:gravity="left" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="0dip"
android:layout_height="wrap_content"
android:gravity="right"
android:layout_gravity="center"
android:layout_weight="1"
android:text="@string/writestr" />
<EditText
android:id="@+id/et_content_6b"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="112233445566"
android:inputType="textMultiLine"
android:gravity="left" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="0dip"
android:layout_height="wrap_content"
android:gravity="right"
android:layout_gravity="center"
android:layout_weight="1"
android:text="@string/readstr" />
<EditText
android:id="@+id/et_read_6b"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text=""
android:inputType="textMultiLine"
android:singleLine="false"
android:gravity="left" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/button_read_6b"
android:layout_width="0dip"
android:layout_height="@dimen/button_height"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:background="@drawable/color_button_selector"
android:layout_marginLeft="5dp"
android:text="@string/butnread" />
<Button
android:id="@+id/button_write_6b"
android:layout_width="0dip"
android:layout_height="@dimen/button_height"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:background="@drawable/color_button_selector"
android:layout_marginLeft="5dp"
android:text="@string/butnwrite" />
<Button
android:id="@+id/button_lock"
android:layout_width="0dip"
android:layout_height="@dimen/button_height"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:background="@drawable/color_button_selector"
android:layout_marginLeft="5dp"
android:text="@string/btn_lock" />
<Button
android:id="@+id/button_checklok"
android:layout_width="0dip"
android:layout_height="@dimen/button_height"
android:layout_gravity="center_horizontal"
android:layout_weight="1"
android:background="@drawable/color_button_selector"
android:layout_marginLeft="5dp"
android:text="@string/btn_checklock" />
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="@color/gray1" />
<LinearLayout
android:id="@+id/layout2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:gravity="center_vertical" >
<LinearLayout
android:id="@+id/llContinuous"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center_vertical"
android:paddingBottom="5dp"
android:paddingTop="5dp" >
</LinearLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="5dp"
android:background="@color/gray1" />
<LinearLayout
android:id="@+id/layout0"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="5dp" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/tvCountOfTags"
android:textSize="14sp" />
<TextView
android:id="@+id/tv_count"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="0"
android:textSize="15sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_alltag"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="0"
android:textSize="15sp"
android:textStyle="bold" />
<Button
android:id="@+id/BtClear"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btClear"
android:textColor="@color/white"
android:textSize="15sp"
android:background="@drawable/color_button_selector"
android:layout_marginRight="5dp" />
<Button
android:id="@+id/BtInventory"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_weight="2"
android:background="@drawable/color_button_selector"
android:text="@string/btInventory"
android:textColor="@color/white" />
</LinearLayout>
<LinearLayout
android:id="@+id/layout4"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:background="@color/white"
android:paddingBottom="5dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="5dp" >
<TextView
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/tvTagUii"
android:textSize="15sp" />
<TextView
android:id="@+id/tv_back"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"
android:text=""
android:textColor="@color/red1"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/tvTagLen"
android:visibility="gone" />
<TextView
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="@string/tvTagCount"
android:textSize="15sp" />
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1px"
android:background="@color/gray1" />
<ListView
android:id="@+id/LvTags"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
</LinearLayout>
</LinearLayout>
</ScrollView>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<include layout="@layout/toolbar_title" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/c_f5f5"
android:paddingStart="10dp"
android:paddingTop="10dp"
android:paddingEnd="10dp" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
style="@style/MatchMatch.Vertical">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/Theme.Rfid_demo2.AppBarOverlay">
<FrameLayout
android:id="@+id/framelayout"
style="@style/MatchMatch"
android:layout_weight="1" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabs"
<com.ashokvarma.bottomnavigation.BottomNavigationBar
android:id="@+id/bottombar"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager.widget.ViewPager
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
\ No newline at end of file
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
style="@style/MatchMatch.Vertical">
<FrameLayout
android:id="@+id/framelayout"
style="@style/MatchMatch"
android:layout_weight="1" />
<com.ashokvarma.bottomnavigation.BottomNavigationBar
android:id="@+id/bottombar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:menu="@menu/navigation" />
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".ui.main.SettingFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_getPower"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_weight="2"
android:text="@string/current_power" />
<Button
android:id="@+id/btn_getPower"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/get_power" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<EditText
android:id="@+id/et_setPower"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:gravity="center"
android:inputType="number"
android:hint="@string/enter_power" />
<Button
android:id="@+id/btn_setPower"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/set_power" />
</LinearLayout>
<EditText
android:id="@+id/et_deviceID"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="deviceID"/>
<Button
android:id="@+id/btn_deviceID"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/get_deviceID"/>
<EditText
android:id="@+id/edt_startFrency"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:hint="@string/start_frency"/>
<EditText
android:id="@+id/edt_frencyStep"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:hint="@string/frency_step"/>
<EditText
android:id="@+id/edt_frencyNumber"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:hint="@string/frency_number"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<Button
android:id="@+id/btn_configFrency"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/set_frency"/>
<Button
android:layout_weight="1"
android:id="@+id/btn_getFrency"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/get_frency"/>
</LinearLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Spinner
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:id="@+id/spinner_mask_area"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/spinner_mask_area"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/mask_list"
app:layout_constraintEnd_toStartOf="@+id/spinner_mask_data"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
<Spinner
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:id="@+id/spinner_mask_data"
android:layout_width="100dp"
android:layout_height="wrap_content"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
<EditText
android:id="@+id/edt_maskStartAddr"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLength="3"
android:hint="@string/mask_start"/>
<EditText
android:visibility="gone"
android:id="@+id/edt_maskLength"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number"
android:maxLength="3"
android:hint="@string/mask_len"/>
<EditText
android:id="@+id/edt_maskData"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:digits="0123456789abcdefABCEDFG"
android:hint="@string/mask_data"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/btn_configMask"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/set_mask"/>
<Button
android:id="@+id/btn_getMask"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/clear_mask"/>
</LinearLayout>
<EditText
android:visibility="invisible"
android:id="@+id/edt_rangeValue"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="range value"/>
<LinearLayout
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<Button
android:id="@+id/btn_setRange"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/set_range"/>
<Button
android:id="@+id/btn_getRange"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="@string/get_range"/>
</LinearLayout>
</LinearLayout>
</ScrollView>
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f2f2f2">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/manage_form_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:divider="?android:attr/listDivider"
android:orientation="vertical"
android:showDividers="middle|end"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="2dp">
<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:gravity="end"
android:text="@string/select_tag"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_choice_epc_tid"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end"
android:text=" "
android:textStyle="bold" />
<Spinner
android:id="@+id/manage_epc_datas_spinner"
android:layout_width="50dp"
android:layout_height="wrap_content" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="2dp">
<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:gravity="end"
android:text="@string/bankid"
android:textStyle="bold" />
<Spinner
android:id="@+id/manage_bank_spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/bank" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="2dp">
<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:gravity="end"
android:text="@string/access_password"
android:textStyle="bold" />
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/manage_password_edit"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:digits="1234567890ABCDEFabcdef"
android:hint="00000000"
android:maxLength="8"
android:text="00000000" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="2dp">
<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:gravity="end"
android:text="@string/memptr"
android:textStyle="bold" />
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/manage_address_edit"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:digits="1234567890"
android:inputType="number"
android:maxLength="3"
android:text="2" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="2dp">
<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:gravity="end"
android:text="@string/memlen"
android:textStyle="bold" />
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/manage_cnt_edit"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:digits="1234567890"
android:inputType="number"
android:maxLength="3"
android:text="1" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="2dp">
<TextView
android:layout_width="100dp"
android:layout_height="wrap_content"
android:gravity="end"
android:text="@string/writestr"
android:textStyle="bold" />
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/manage_write_edit"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:digits="1234567890ABCDEFabcdef"
android:hint="@string/tag_hint" />
</LinearLayout>
</LinearLayout>
<Button
android:id="@+id/manage_read_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:backgroundTint="@color/green"
android:text="@string/butnread"
app:layout_constraintEnd_toStartOf="@+id/manage_write_btn"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/manage_form_layout" />
<Button
android:id="@+id/manage_write_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@color/blue"
android:text="@string/butnwrite"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/manage_read_btn"
app:layout_constraintTop_toTopOf="@+id/manage_read_btn" />
<androidx.cardview.widget.CardView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:elevation="16dp"
app:cardCornerRadius="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/manage_read_btn">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:divider="?android:attr/listDivider"
android:orientation="vertical"
android:showDividers="middle">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:text="@string/read_tags" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="8dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="EPC" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="DATA" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/manage_list_rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginHorizontal="8dp" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#f2f2f2">
<androidx.cardview.widget.CardView
android:id="@+id/cardView"
android:layout_width="0dp"
android:layout_height="108dp"
android:layout_margin="8dp"
android:layout_marginTop="5dp"
app:cardCornerRadius="8dp"
app:cardElevation="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="109dp"
android:padding="8dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/scan_info"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="@string/tvCountOfTags"
app:layout_constraintBottom_toTopOf="@+id/scan_count_text"
app:layout_constraintEnd_toEndOf="@+id/scan_count_text"
app:layout_constraintStart_toStartOf="@+id/scan_count_text" />
<TextView
android:id="@+id/scan_count_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="0"
android:textColor="@android:color/holo_red_light"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/divider"
app:layout_constraintHorizontal_bias="0.539"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.783" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:text="@string/tvTagCount"
app:layout_constraintBottom_toTopOf="@+id/scan_total_text"
app:layout_constraintEnd_toEndOf="@+id/scan_total_text"
app:layout_constraintStart_toStartOf="@+id/scan_total_text" />
<TextView
android:id="@+id/scan_total_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="0"
android:textColor="@android:color/holo_red_light"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.494"
app:layout_constraintStart_toEndOf="@id/divider"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.783" />
<View
android:id="@+id/divider"
android:layout_width="1dp"
android:layout_height="0dp"
android:background="?android:attr/listDivider"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
<LinearLayout
android:id="@+id/ll_i"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:orientation="horizontal"
app:layout_constraintTop_toBottomOf="@+id/cardView">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/embank" />
<Spinner
android:id="@+id/spinner_inventory_mode"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:entries="@array/spinner_inventory_mode" />
<TextView
android:id="@+id/text_firmware"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center|right"
android:padding="8dp"
android:text="" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_scabbtn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="8dp"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ll_i">
<Button
android:id="@+id/btn_clear"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="8dp"
android:layout_weight="1"
android:shadowRadius="2"
android:text="@string/clear" />
<Button
android:id="@+id/scan_start_btn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="8dp"
android:layout_weight="3"
android:shadowRadius="2"
android:text="@string/btInventory" />
</LinearLayout>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_margin="8dp"
app:cardCornerRadius="8dp"
app:cardElevation="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ll_scabbtn">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:id="@+id/scan_title_ll"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="?android:attr/listDivider"
android:orientation="horizontal"
android:showDividers="middle"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="5"
android:gravity="center"
android:padding="8dp"
android:text="DATA"
android:textSize="13sp"
android:textStyle="bold" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1.2"
android:gravity="center"
android:padding="8dp"
android:text="COUNT"
android:textSize="13sp"
android:textStyle="bold" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:padding="8dp"
android:text="RSSI"
android:textSize="13sp"
android:textStyle="bold" />
</LinearLayout>
<View
android:id="@+id/divider2"
android:layout_width="0dp"
android:layout_height="1dp"
android:background="?android:attr/listDivider"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/scan_title_ll" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/scan_list_rv"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_margin="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/divider2" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.material.card.MaterialCardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:layout_gravity="center"
android:layout_margin="8dp"
android:clickable="true"
android:focusable="true"
android:foreground="?selectableItemBackground"
app:cardCornerRadius="8dp"
app:cardElevation="14dp">
<LinearLayout
style="@style/WrapWrap.Vertical"
android:layout_gravity="center"
android:layout_marginBottom="5dp">
<View
android:id="@+id/v_line"
android:layout_width="match_parent"
android:layout_height="8dp"
android:background="@drawable/blue_round_bg" />
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/iv_background"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center"
android:layout_marginTop="10dp"
android:background="@drawable/blue_round_bg"
android:padding="15dp"
android:src="@mipmap/outbound_icon" />
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="5dp"
android:shadowColor="#000000"
android:text="出库管理"
android:textColor="#000000"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/tv_tag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginTop="5dp"
android:gravity="center"
android:paddingStart="5dp"
android:paddingEnd="5dp"
android:text="处理商品出库操作,扫码更新库存信息"
android:textColor="#7f8c8d"
android:textSize="10sp" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="epc"
android:id="@+id/sp_epc_item"
android:layout_gravity="left"
android:layout_marginTop="5dp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="tid"
android:id="@+id/sp_tid_item"
android:layout_gravity="left"
android:layout_marginBottom="5dp" />
</LinearLayout>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.urovo.barcodescanner.activity.RateScanActivity">
<item
android:id="@+id/action_6b"
android:orderInCategory="100"
android:title="@string/_6b_tag_activity"
app:showAsAction="never" />
</menu>
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
</menu>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">RFIDDemo</string>
<string name="tab_text_1">tag scan</string>
<string name="tab_text_2">tag manage</string>
<string name="tab_text_3">setting</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
<string name="info_result">result:</string>
<string name="txtepc">tag ID:</string>
<string name="bankid">Memory:</string>
<string name="memptr">address:</string>
<string name="memlen">length:</string>
<string name="readstr">read datas:</string>
<string name="writestr">Data to write:</string>
<string name="butnread">read</string>
<string name="butnwrite">write</string>
<string name="btn_lock">lock</string>
<string name="btn_checklock">check lock</string>
<string name="tvCountOfTags">number of tags</string>
<string name="tvTagCount">total</string>
<string name="btClear">clear data</string>
<string name="ReadTime">time(ms):</string>
<string name="tvTagUii">tag</string>
<string name="tvTagLen">length</string>
<string name="rbInventorySingle">once</string>
<string name="rbInventoryLoop">cycle</string>
<string name="btInventory">start</string>
<string name="btn_stop_Inventory">stop</string>
<string name="title_stoping_Inventory">stopping</string>
<string name="btStoping">stopping</string>
<string name="_6b_tag_activity">6B tag</string>
<string name="scan_info">Scan information</string>
<string name="carry_tid">read tid</string>
<string name="select_tag">select tag:</string>
<string name="access_password">access pwd:</string>
<string name="read_tags">tags info:</string>
<string name="tag_hint">Please enter data</string>
<string name="current_power">current power:</string>
<string name="enter_power">input power</string>
<string name="get_power">get</string>
<string name="set_power">set</string>
<string name="firmware">firmware:v</string>
<string name="set_power_fail">set power fail</string>
<string name="set_power_success">set power success</string>
<string name="get_power_fail">get power fail</string>
<string name="get_power_success">get power success</string>
<string name="write_tag_success">write data success</string>
<string name="write_tag_fail">write data fail</string>
<string name="write_epc_first">Please enter the EPC content to be written first</string>
<string name="read_tag_success">read tag success</string>
<string name="read_tag_fail">read tag fail</string>
<string name="content_not_null">The input cannot be empty</string>
<string name="power_value_not_allow">The value of power is not supported</string>
<string name="get_deviceID">getID</string>
<string name="start_frency">Starting frequency</string>
<string name="frency_step">Frequency point interval</string>
<string name="frency_number">Number of frequency points</string>
<string name="set_frency">Set the band</string>
<string name="get_frency">Get the band</string>
<string name="mask_area">area</string>
<string name="mask_start">Start address</string>
<string name="mask_len">length</string>
<string name="mask_data">data</string>
<string name="set_mask">set mask</string>
<string name="clear_mask">clear mask</string>
<string name="set_range">set range</string>
<string name="get_range">get range</string>
<string name="gj_no_support">Firmware is not supported</string>
<string name="set_success">Setup successful</string>
<string name="set_fail">Setup failed</string>
<string name="get_fail">Acquisition failed</string>
<string name="write_t_s">\"Write tag successful \"</string>
<string name="write_t_f">\"Failed to write label \"</string>
<string name="battery">battery:</string>
<string name="embank">region:</string>
<string name="rfid_not_init">rfid not initialized.</string>
<string name="mask_list">mask list:</string>
<string name="clear">Clear</string>
</resources>
\ No newline at end of file
<resources>
<dimen name="fab_margin">48dp</dimen>
</resources>
\ No newline at end of file
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.Courtaiapp" parent="Theme.MaterialComponents.Light.NoActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_200</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/black</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_200</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
<item name="android:windowBackground">@color/white</item>
</style>
</resources>
\ No newline at end of file
<resources>
<dimen name="fab_margin">200dp</dimen>
</resources>
\ No newline at end of file
<resources>
<dimen name="fab_margin">48dp</dimen>
</resources>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">RFIDDemo</string>
<string name="tab_text_1">标签扫描</string>
<string name="tab_text_2">标签管理</string>
<string name="tab_text_3">设置</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
<string name="info_result">执行结果:</string>
<string name="txtepc">标签ID:</string>
<string name="bankid">存储区:</string>
<string name="memptr">起始地址:</string>
<string name="memlen">数据长度:</string>
<string name="readstr">读出数据:</string>
<string name="writestr">待写数据:</string>
<string name="butnread">读数据</string>
<string name="butnwrite">写数据</string>
<string name="btn_lock">锁定</string>
<string name="btn_checklock">检查锁定</string>
<string name="tvCountOfTags">标签数量</string>
<string name="tvTagCount">累计返回标签数量</string>
<string name="btClear">清空数据</string>
<string name="ReadTime">时间(ms):</string>
<string name="tvTagUii">标签</string>
<string name="tvTagLen">长度</string>
<string name="rbInventorySingle">单次</string>
<string name="rbInventoryLoop">循环</string>
<string name="btInventory">开始识别</string>
<string name="btn_stop_Inventory">停止识别</string>
<string name="title_stoping_Inventory">停止中</string>
<string name="btStoping">停止中</string>
<string name="_6b_tag_activity">6B标签</string>
<string name="scan_info">扫描信息</string>
<string name="carry_tid">读取tid</string>
<string name="select_tag">选择标签:</string>
<string name="access_password">访问密码:</string>
<string name="read_tags">读取到的标签:</string>
<string name="tag_hint">请输入HEX数据</string>
<string name="current_power">当前功率:</string>
<string name="enter_power">输入功率的值</string>
<string name="get_power">获取功率</string>
<string name="set_power">设置功率</string>
<string name="firmware">固件:v</string>
<string name="set_power_fail">设置功率失败</string>
<string name="set_power_success">设置功率成功</string>
<string name="get_power_fail">获取功率失败</string>
<string name="get_power_success">获取功率成功</string>
<string name="write_tag_success">写入数据成功</string>
<string name="write_tag_fail">写入数据失败</string>
<string name="write_epc_first">请先输入要写入的EPC内容</string>
<string name="read_tag_success">读取数据成功</string>
<string name="read_tag_fail">读取数据失败</string>
<string name="content_not_null">输入内容不能为空</string>
<string name="power_value_not_allow">功率的值不在支持范围</string>
<string name="get_deviceID">获取ID</string>
<string name="start_frency">起始频点</string>
<string name="frency_step">频点步长</string>
<string name="frency_number">频点数</string>
<string name="set_frency">设置自定义频段</string>
<string name="get_frency">获取自定义频段</string>
<string name="mask_area">掩码区域</string>
<string name="mask_start">起始地址</string>
<string name="mask_len">长度</string>
<string name="mask_data">掩码数据</string>
<string name="set_mask">设置掩码</string>
<string name="clear_mask">清除掩码</string>
<string name="set_range">设置range</string>
<string name="get_range">获取range</string>
<string name="gj_no_support">固件不支持</string>
<string name="set_success">设置成功</string>
<string name="set_fail">设置失败</string>
<string name="get_fail">获取失败</string>
<string name="write_t_s">\"写标签成功 \"</string>
<string name="write_t_f">\"写标签失败 \"</string>
<string name="battery">电量:</string>
<string name="embank">region:</string>
<string name="rfid_not_init">rfid 未初始化.</string>
<string name="mask_list">掩码列表:</string>
<string name="choice_epc_first">请先选择要操作的标签</string>
<string name="clear">清除</string>
</resources>
\ No newline at end of file
<resources>
<string name="app_name">RFID</string>
<string name="action_settings">Settings</string>
<string name="txt_app_name">仓储管理系统</string>
<string name="action_settings" translatable="false">Settings</string>
<string name="txt_app_name" translatable="false">仓储管理系统</string>
<string name="tips_network_errors" translatable="false">网络异常,请检查您的网络</string>
<string name="tips_json_syntax_error" translatable="false">JSON异常</string>
<string name="tips_unknown_error" translatable="false">未知异常</string>
<string name="tips_http_error">HTTP异常</string>
<string name="tips_connection_server_timeout">连接服务器超时</string>
<string name="tips_connect_error">服务器连接异常</string>
<string name="tips_nothing_data">暂无数据</string>
<string name="network_error">网络异常</string>
<string name="network_timeout">网络超时</string>
<string name="json_syntax_error">JSON异常</string>
<string name="unknown_error">未知错误</string>
<string name="parse_error">解析数据失败</string>
<string name="connect_error">连接错误</string>
<string name="tips_http_error" translatable="false">HTTP异常</string>
<string name="tips_connection_server_timeout" translatable="false">连接服务器超时</string>
<string name="tips_connect_error" translatable="false">服务器连接异常</string>
<string name="tips_nothing_data" translatable="false">暂无数据</string>
<string name="network_error" translatable="false">网络异常</string>
<string name="network_timeout" translatable="false">网络超时</string>
<string name="json_syntax_error" translatable="false">JSON异常</string>
<string name="unknown_error" translatable="false">未知错误</string>
<string name="parse_error" translatable="false">解析数据失败</string>
<string name="connect_error" translatable="false">连接错误</string>
<string name="connect_timeout" translatable="false">连接超时</string>
<string name="wellcome_loging" translatable="false">欢迎登录</string>
......@@ -27,87 +27,6 @@
<string name="login" translatable="false">登 录</string>
<string name="login_success" translatable="false">登录成功</string>
<string name="tab_text_1">tag scan</string>
<string name="tab_text_2">tag manage</string>
<string name="tab_text_3">setting</string>
<!-- TODO: Remove or change this placeholder text -->
<string name="hello_blank_fragment">Hello blank fragment</string>
<string name="info_result">result:</string>
<string name="txtepc">tag ID:</string>
<string name="bankid">Memory:</string>
<string name="memptr">address:</string>
<string name="memlen">length:</string>
<string name="readstr">read datas:</string>
<string name="writestr">Data to write:</string>
<string name="butnread">read</string>
<string name="butnwrite">write</string>
<string name="btn_lock">lock</string>
<string name="btn_checklock">check lock</string>
<string name="tvCountOfTags">number of tags</string>
<string name="tvTagCount">total</string>
<string name="btClear">clear data</string>
<string name="ReadTime">time(ms):</string>
<string name="tvTagUii">tag</string>
<string name="tvTagLen">length</string>
<string name="rbInventorySingle">once</string>
<string name="rbInventoryLoop">cycle</string>
<string name="btInventory">start</string>
<string name="btn_stop_Inventory">stop</string>
<string name="title_stoping_Inventory">stopping</string>
<string name="btStoping">stopping</string>
<string name="_6b_tag_activity">6B tag</string>
<string name="scan_info">Scan information</string>
<string name="carry_tid">read tid</string>
<string name="select_tag">select tag:</string>
<string name="access_password">access pwd:</string>
<string name="read_tags">tags info:</string>
<string name="tag_hint">Please enter data</string>
<string name="current_power">current power:</string>
<string name="enter_power">input power</string>
<string name="get_power">get</string>
<string name="set_power">set</string>
<string name="firmware">firmware:v</string>
<string name="set_power_fail">set power fail</string>
<string name="set_power_success">set power success</string>
<string name="get_power_fail">get power fail</string>
<string name="get_power_success">get power success</string>
<string name="write_tag_success">write data success</string>
<string name="write_tag_fail">write data fail</string>
<string name="write_epc_first">Please enter the EPC content to be written first</string>
<string name="read_tag_success">read tag success</string>
<string name="read_tag_fail">read tag fail</string>
<string name="content_not_null">The input cannot be empty</string>
<string name="power_value_not_allow">The value of power is not supported</string>
<string name="get_deviceID">getID</string>
<string name="start_frency">Starting frequency</string>
<string name="frency_step">Frequency point interval</string>
<string name="frency_number">Number of frequency points</string>
<string name="set_frency">Set the band</string>
<string name="get_frency">Get the band</string>
<string name="mask_area">area</string>
<string name="mask_start">Start address</string>
<string name="mask_len">length</string>
<string name="mask_data">data</string>
<string name="set_mask">set mask</string>
<string name="clear_mask">clear mask</string>
<string name="set_range">set range</string>
<string name="get_range">get range</string>
<string name="gj_no_support">Firmware is not supported</string>
<string name="set_success">Setup successful</string>
<string name="set_fail">Setup failed</string>
<string name="get_fail">Acquisition failed</string>
<string name="write_t_s">\"Write tag successful \"</string>
<string name="write_t_f">\"Failed to write label \"</string>
<string name="battery">battery:</string>
<string name="embank">region:</string>
<string name="rfid_not_init">rfid not initialized.</string>
<string name="mask_list">mask list:</string>
<string name="clear">Clear</string>
<string name="qv_add">+</string>
<string name="qv_remove">-</string>
<string name="qv_add" translatable="false">+</string>
<string name="qv_remove" translatable="false">-</string>
</resources>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment