我正在为一个主要使用集成了霍尼韦尔扫描仪的 NOMU T20 设备的客户端开发一个 Android 应用程序。
我正在使用虚拟键盘将 TextWatcher 添加到 EditText 以显示扫描的条形码并触发对 API 端点的调用(使用和结束字符“\n”)。如果我不导航到另一个活动或片段,它工作正常。
问题是一旦我完成当前活动(又名“Act1”)并使用另一个带有自己的 TextWatcher 的 EditText 导航到另一个(又名“Act2”)并再次扫描它会触发两个 TextWatcher,第一个来自“Act1”,最后一个来自“Act2”。这意味着当我只想为 Act2(当前活动)调用第二个 API 端点时,我对第一个 API 端点有一个额外的调用。
这个问题也可以用片段来重现。
我尝试使用这个使用广播接收器的库 - > https://github.com/hjgode/IntentAPISample_by_HW没有成功,我没有得到任何数据。
重现问题的代码(仅使用集成扫描仪而非外部扫描仪)
在活动的 EditText 上添加一个 TextChangedListener:
edit.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s.toString().trim().length() == 0)
return;
if (s.length() > 0) {
char lastCharacter = s.charAt(s.length() - 1);
if (lastCharacter == '\n' || lastCharacter == '\r') {
String barcode = s.subSequence(0, s.length() - 1).toString();
edit.setText("");
Toast.makeText(MainActivity.this, barcode, Toast.LENGTH_LONG).show();
Log.e("MainActivity", barcode);
}
}
}
});
在扫描时的 Act2 上,我在终端中得到了这个日志。我试图找出“I/song”和“I/song-view”消息。
I/song: hava scan message androidx.appcompat.widget.AppCompatEditText{9895392 VFED..CL. .F....ID 206,467-515,558 #7f080097 app:id/edit_barcode}
I/song-view: hava scan message 0
E/MainActivity: HORAE
I/song: hava scan message androidx.appcompat.widget.AppCompatEditText{fc384f3 VFED..CL. .F...... 206,467-515,558 #7f080098 app:id/edit_barcode2}
I/song-view: hava scan message 0
E/Act2: HORAE
D/WindowClient: Add to mViews: android.widget.LinearLayout{9fd1546 V.E...... ......I. 0,0-0,0}, this = android.view.WindowManagerGlobal@ff7017e
D/ViewRootImpl[Toast]: hardware acceleration = true , fakeHwAccelerated = false, sRendererDisabled = false, forceHwAccelerated = false, sSystemRendererDisabled = false
D/Surface: Surface::connect(this=0x8d7d9000,api=1)
D/Surface: Surface::allocateBuffers(this=0x8d7d9000)
D/WindowClient: Add to mViews: android.widget.LinearLayout{1653fd2 V.E...... ......I. 0,0-0,0}, this = android.view.WindowManagerGlobal@ff7017e
D/ViewRootImpl[Toast]: hardware acceleration = true , fakeHwAccelerated = false, sRendererDisabled = false, forceHwAccelerated = false, sSystemRendererDisabled = false
D/Surface: Surface::allocateBuffers(this=0x8bf1c000)
D/Surface: Surface::connect(this=0x8bf1c000,api=1)
如果有人知道解决此问题的任何方法,我将不胜感激 在此先感谢