Java 从Android触发多产条形码扫描设备
对不起,我的英语不好。 我使用的是多产的设备,我需要向其传递命令和读取数据。我想将数据读取和写入com端口。 我引用了pl2303driver.jar库中给出的代码,这些代码是我从这里提供的SDK获得的 若我从条形码扫描器扫描一些东西,我就能够从com端口读取那个些数据。 若我向设备写入一些数据,write方法将返回写入的字节数。没问题。 但我想向设备发送命令,该设备将点亮条形码扫描器的灯光并扫描条形码。 我使用USB串行终端Lite应用程序。如果我发出命令#55#30#41#AA,USB串行终端Lite将触发条形码扫描仪。 我想在我的应用程序中实现同样的效果。我尝试了文档中给出的#55#30#41#AA、0x55、0x30、0x41、0xAA命令。但它们不起作用。 我想我缺少了触发条形码扫描器的特定命令。 我在这里发布一些代码Java 从Android触发多产条形码扫描设备,java,android,Java,Android,对不起,我的英语不好。 我使用的是多产的设备,我需要向其传递命令和读取数据。我想将数据读取和写入com端口。 我引用了pl2303driver.jar库中给出的代码,这些代码是我从这里提供的SDK获得的 若我从条形码扫描器扫描一些东西,我就能够从com端口读取那个些数据。 若我向设备写入一些数据,write方法将返回写入的字节数。没问题。 但我想向设备发送命令,该设备将点亮条形码扫描器的灯光并扫描条形码。 我使用USB串行终端Lite应用程序。如果我发出命令#55#30#41#AA,USB串行
PL2303Driver mSerial;
private static final String ACTION_USB_PERMISSION = "com.prolific.pl2303hxdsimpletest.USB_PERMISSION";
mSerial = new PL2303Driver((UsbManager) getSystemService(Context.USB_SERVICE),this, ACTION_USB_PERMISSION);
读取方法的代码:
private void readDataFromSerial()
{
int len;
byte[] rbuf = new byte[4096];
StringBuffer sbHex=new StringBuffer();
Log.d(TAG, "Enter readDataFromSerial");
if(null==mSerial)
return;
if(!mSerial.isConnected())
return;
len = mSerial.read(rbuf);
if(len<0)
{
Log.d(TAG, "Fail to bulkTransfer(read data)");
return;
}
if (len > 0)
{
if (SHOW_DEBUG)
{
Log.d(TAG, "read len : " + len);
}
for (int j = 0; j < len; j++)
{
sbHex.append((char) (rbuf[j]&0x000000FF));
}
etRead.setText(sbHex.toString());
Toast.makeText(this, "len="+len, Toast.LENGTH_SHORT).show();
}
else
{
if (SHOW_DEBUG)
{
Log.d(TAG, "read len : 0 ");
}
etRead.setText("empty");
return;
}
try
{
Thread.sleep(50);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
Log.d(TAG, "Leave readDataFromSerial");
}
private void readDataFromSerial()
{
内伦;
字节[]rbuf=新字节[4096];
StringBuffer sbHex=新的StringBuffer();
Log.d(标记“输入readDataFromSerial”);
if(null==mSerial)
回来
如果(!mSerial.isConnected())
回来
len=mSerial.read(rbuf);
if(len0)
{
如果(显示调试)
{
Log.d(标签“读取长度:+len”);
}
对于(int j=0;j
写入方法代码:
private void writeDataToSerial()
{
Log.d(TAG, "Enter writeDataToSerial");
if(null==mSerial)
return;
if(!mSerial.isConnected())
return;
String strWrite = etWrite.getText().toString(); //
if (SHOW_DEBUG)
{
Log.d(TAG, "PL2303Driver Write(" + strWrite.length() + ") : " + strWrite);
}
int res = mSerial.write(strWrite.getBytes(), strWrite.length());
if( res<0 )
{
Log.d(TAG, "setup: fail to controlTransfer: "+ res);
return;
}
Toast.makeText(this, "Write length: "+strWrite.length()+" bytes", Toast.LENGTH_SHORT).show();
if (SHOW_DEBUG)
{
Log.d(TAG, "PL2303Driver Write 2(" + strWrite.length() + ") : " + strWrite);
}
Log.d(TAG, "Leave writeDataToSerial");
}
private void writeDataToSerial()
{
Log.d(标记“输入writeDataToSerial”);
if(null==mSerial)
回来
如果(!mSerial.isConnected())
回来
字符串strWrite=etWrite.getText().toString();//
如果(显示调试)
{
Log.d(标记“PL2303Driver Write”(“+strWrite.length()+”):“+strWrite”);
}
int res=mSerial.write(strWrite.getBytes(),strWrite.length());
如果(res正常。我在回答我自己的问题。我丢失了使扫描仪LED发光的命令。我设法得到了它。此外,还需要做以下事情:
波特率:9600
数据位:8
平价:无
停止位:1
pl2303driver.jar在这里非常有用