搜索
bottom↓
回复: 8

最便宜的条码枪,支持二维码

[复制链接]

出0入0汤圆

发表于 2013-8-22 17:25:59 | 显示全部楼层 |阅读模式
本帖最后由 linhaimi 于 2013-8-23 19:53 编辑

有的时候我们需要扫描一些条码(或许是一个淘宝小卖家,或者其它什么物流、个人库管什么的),一个条码枪不便宜,二维码枪就更贵了。

在这里提供一个将任何一个有摄像头(最好可以变焦)、支持WiFi的Android设备变为一个“专业”的条码枪的方法。
不释放APK文件,需要的自行编译。

这里是工程文件:

关键代码:

package com.amobbs.codeinput;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {

        public IntentIntegrator II = null;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                II = new IntentIntegrator(this);
        }

        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
                // Inflate the menu; this adds items to the action bar if it is present.
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
        }

        public void Scan(View v) {
                II.initiateScan(IntentIntegrator.ALL_CODE_TYPES);
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                final IntentResult result = IntentIntegrator.parseActivityResult(
                                requestCode, resultCode, data);
                if (result != null) {
                        String contents = result.getContents();
                        if (contents != null) {
                                Thread THREAD = new Thread(new Runnable() {
                                        @Override
                                        public void run() {
                                                try {
                                                        TextView v_IP = (TextView) findViewById(R.id.editText_IP);
                                                        TextView v_PORT = (TextView) findViewById(R.id.editText_PORT);
                                                        String IP = v_IP.getText().toString();
                                                        Integer PORT = Integer.parseInt(v_PORT.getText()
                                                                        .toString());
                                                        byte[] DATA = result.getContents().getBytes();
                                                        DatagramPacket packet = new DatagramPacket(DATA,
                                                                        DATA.length, InetAddress.getByName(IP),
                                                                        PORT);
                                                        DatagramSocket socket = new DatagramSocket(10010);
                                                        socket.send(packet);
                                                        socket.close();
                                                } catch (Exception e) {
                                                }
                                        }
                                });
                                THREAD.start();
                        }
                }
                super.onActivityResult(requestCode, resultCode, data);
        }
}

这里是Windows脚本(PowerShell):

#在 PowerShell ISE 的命令行中输入 [System.Windows.Forms.SendKeys].Assembly.Location 可以获得 System.Windows.Forms.dll 的路径信息
Add-Type -Path C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll
$Device = New-Object System.Net.Sockets.UdpClient(10086)
$ip = New-Object System.Net.IPEndPoint([ipaddress]::Any, 0)
while($true)
{
    $msg = $Device.Receive([ref]$ip)
    $msg = [System.Text.Encoding]::UTF8.GetString($msg)
    [System.Windows.Forms.SendKeys]::SendWait($msg)
    [System.Windows.Forms.SendKeys]::SendWait('~') #附加一个回车符
}


首先启动 PowerShell 脚本(启动后可以最小化什么的,反正就不管了……),然后 Android 设备通过调用ZXing实现条码的扫描,然后将结果以UDP协议从10010端口发送出去,电脑的脚本在10086端口接收到数据以后,通过模拟按键的方式输出,可以用于Excel或其他需要输入条码信息的地方。

如果你觉得这篇文章对你有用,可以捐赠一点 BTC 给我玩玩,帐号是 1E5Y3yDywdanJtEwEHZYv3igGwnsZSp58r


补充一下:
1.程序需要“条码扫描器”的支持,也就是 zxing-2.2\android 这个文件夹里面的项目(即Google官方的开源条码扫描器),在使用这个程序之前建议手动编译下载安装 zxing-2.2\android ,非 Google Play 下载安装的条码扫描器感觉权限要得太过分了。
2.如果你没有安装“条码扫描器”,第一次使用的时候会联网通过某些应用商店安装,但是应用商店里面的“条码扫描器”可能版本什么的问题(例如图片放大或者不能对焦什么的……),建议自己编译安装。
3. PowerShell 尤其是 PowerShell ISE 智能感知灰常强大,编写小工具基本不开VisualStudio了,而且属于系统自带。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出200入0汤圆

发表于 2013-8-22 21:42:04 来自手机 | 显示全部楼层
好东东,学习

出0入0汤圆

发表于 2013-8-22 22:05:46 | 显示全部楼层
支持楼主~~~

好东西~~~

出0入0汤圆

发表于 2013-8-22 22:13:29 | 显示全部楼层
呵呵,谁会给你 BTC 啊,都没有。。。

出0入0汤圆

发表于 2013-8-22 23:53:28 | 显示全部楼层
zxing感觉有些慢,不知道有木有更快的

出0入0汤圆

发表于 2013-8-23 09:30:57 | 显示全部楼层
不错,收藏,以后可能有用

出0入0汤圆

 楼主| 发表于 2013-8-23 13:55:20 | 显示全部楼层
有一个想法:

(扫描可见

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-8-23 14:13:34 | 显示全部楼层
啥都不懂。看看

出0入0汤圆

发表于 2017-9-18 12:30:55 | 显示全部楼层
关注,标记一下
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 12:38

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表