|
本帖最后由 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周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|