如何在Android中获取iData(移动计算机iData95E)iScan条形码图像?
iData iScan是由无锡iData科技有限公司开发的一项技术。 它通过iData内置扫描仪应用程序iScan用于条形码扫描仪 任何人都可以提供任何其他文件或参考。 因此,我可以在扫描后获得条形码数据如何在Android中获取iData(移动计算机iData95E)iScan条形码图像?,android,barcode-scanner,scanning,Android,Barcode Scanner,Scanning,iData iScan是由无锡iData科技有限公司开发的一项技术。 它通过iData内置扫描仪应用程序iScan用于条形码扫描仪 任何人都可以提供任何其他文件或参考。 因此,我可以在扫描后获得条形码数据 感谢您的积极回复。我有用于扫描条形码的iData设备。获取条形码数据非常简单,只需在屏幕上放置一个edittext,将当前焦点设置为edittext,然后使用iData设备扫描条形码,现在您可以看到,在成功扫描条形码后,iData设备默认情况下将条形码编号添加到edittext。旧问题但新答案
感谢您的积极回复。我有用于扫描条形码的iData设备。获取条形码数据非常简单,只需在屏幕上放置一个edittext,将当前焦点设置为edittext,然后使用iData设备扫描条形码,现在您可以看到,在成功扫描条形码后,iData设备默认情况下将条形码编号添加到edittext。旧问题但新答案。这样,它不需要编辑文本
- 步骤1(可选,但推荐)
点击下载链接: 链接:密码:pa4s 您将得到404错误,好的,将url从
pan.baidu.com
重写到yun.baidu.com
。现在url看起来像这样:http://yun.baidu.com/s/1bpl50uj
。转到该链接,输入密码并下载应用程序
- 步骤2
pan
更改为yun
。输入密码并下载文件
之后,您可以探索该应用程序的来源。您需要libbarcode.sofromlibs/armeabi/
和BarcodeScan.jarfromlibs/
libbarcode.so
必须放入jniLibs\armeabi
文件夹BarcodeScan.jar
必须添加为依赖项
这是HardwareControl类
public class HardwareControl implements BarcodeJNI.ScanCallBack {
static public final int BARCODE_READ = 10;
private BarcodeJNI barcodeControll;// = new BarcodeJNI(this);
private String scanResult = "";
private boolean scanInProgress = false;
private boolean scanSuccess = false;
private boolean scannerLoaded = false;
private boolean iScanRunning = true;
private final String noIdata = "You are not using iData terminal. Barcode scanner not supported!";
public HardwareControl(Context context){
MainActivity.w("HardwareControl constructor");
try {
boolean isiScanRunning = isIscanAppRunning(context);
iScanRunning = isiScanRunning;
if (isiScanRunning)
{
MainActivity.w("HardwareControl constructor. iScan is running. Returning ...");
return;
}
barcodeControll = new BarcodeJNI(context);
barcodeControll.setmScanCB(this);
this.scannerLoaded = true;
MainActivity.w("HardwareControl constructor success!");
}catch (Throwable ex)
{
MainActivity.w("HardwareControl constructor error!", ex);
barcodeControll = null;
}
}
public boolean isiScanRunning()
{
return this.iScanRunning;
}
public boolean isScannerLoaded()
{
return this.scannerLoaded;
}
public void Open() {
MainActivity.w("HardwareControl open");
if (barcodeControll == null)
{
MainActivity.w(noIdata);
return;
}
barcodeControll.Barcode_open();
scanInProgress = false;
}
public void Close() {
MainActivity.w("HardwareControl close");
if (barcodeControll == null)
{
MainActivity.w(noIdata);
return;
}
barcodeControll.Barcode_Close();
MainActivity.w("HardwareControl close scanner success!");
}
public void scan_start() {
MainActivity.w("HardwareControl scan start");
if (barcodeControll == null)
{
MainActivity.w(noIdata);
return;
}
if (!scanInProgress) {
barcodeControll.Barcode_StartScan();
scanResult = "";
scanInProgress = true;
scanSuccess = false;
}
}
public void scan_stop() {
if (barcodeControll == null)
{
MainActivity.w(noIdata);
return;
}
MainActivity.w("HardwareControl scan stop");
barcodeControll.Barcode_StopScan();
scanInProgress = false;
}
public String GetScanResult()
{
return scanResult;
}
public boolean isScanSuccess(){ return scanSuccess; }
@Override
public void onScanResults(byte[] bytes) {
MainActivity.w("HardwareControl onScanResults()");
if (bytes != null)
{
try {
String res = new String(bytes, "GBK");
MainActivity.w("Scanned data: [" + res + "]");
scanResult = res;
scanSuccess = true;
}catch (Exception ex)
{
MainActivity.w("onScanResults fault: ", ex);
}
}
}
private boolean isIscanAppRunning(Context ctx)
{
boolean ret = false;
ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> procInfos = activityManager.getRunningServices(Integer.MAX_VALUE); //activityManager.getRunningAppProcesses();
for(int i = 0; i < procInfos.size(); i++) {
if (procInfos.get(i).service.getClassName().equals("com.android.auto.iscan.iScan_Service")) {
MainActivity.w("iScan is running..");
ret = true;
}
//MainActivity.w("Service: " + procInfos.get(i).service.getClassName());
}
return ret;
}
}
barcodeControl=newHardwareControl(getApplicationContext())
MainActivity.w()
只是Log.d()的包装。希望它能帮助某些人:)如何在没有焦点文本的情况下获取条形码编号?例如,在后台接收服务@希拉格Raval@DomezchociData设备将仅在编辑文本字段中返回条形码编号。我不确定在后台服务中是否收到条形码号码
HardwareControl barcodeControl = null; //global
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_document_open);
/* barcode scanner part */
barcodeControl = new HardwareControl(getApplicationContext());
if (barcodeControl.isiScanRunning())
{
/* ask user to turn off iScan app */
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.error);
builder.setMessage(R.string.iScanIsRunning);
builder.setNeutralButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
builder.setCancelable(true);
AlertDialog alert = builder.create();
alert.show();
}else {
if (!barcodeControl.isScannerLoaded()) {
ShowToast("You are not using iData terminal!", Toast.LENGTH_LONG);
}
barcodeControl.Open();
registerReceiver(_keyReceiver, new IntentFilter("com.idatachina.SCANKEYEVENT"));
}
/* end barcode scanner part */
}
@Override
protected void onDestroy() {
barcodeControl.Close();
try {
unregisterReceiver(_keyReceiver);
} catch (Exception ex)
{
MainActivity.w("DocumentOpenActivity.onDestroy() unregisterReceiver failure", ex);
}
super.onDestroy();
}
private BroadcastReceiver _keyReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals("com.idatachina.SCANKEYEVENT"))
{
MainActivity. w("chine scanevent");
String key_action = intent.getStringExtra("action").toLowerCase();
String key_code = intent.getStringExtra("code");
MainActivity.w("key_action = ["+key_action+"], key_code=["+key_code+"]");
switch (key_action)
{
case "down":
barcodeControl.scan_start();
break;
case "up":
barcodeControl.scan_stop();
parseScanInput();
break;
default: MainActivity.w("Unknown key action: " + key_action); break;
}
}
MainActivity.w("broadcast receive action = " + intent.getAction());
}
};
private void parseScanInput()
{
if (barcodeControl.isScanSuccess()) {
String scanResult = barcodeControl.GetScanResult();
scanResult = scanResult.replaceAll("[\n\r]", "").trim();
MainActivity.w(String.format("parseScanInput() result: [%s]", scanResult));
// your app logic here
}
}