最近公司接了一个手持PDA扫描仪的项目,说是Android版本的,要我去查资料做这个东西。

在我一顿摸索下算是完成了,所以才想写一篇博客给第一次接触这个东西的人。希望能帮到你们

刚接到的时候我是一头雾水,因为一直在做手机app突然弄个手持设备有点懵逼(本人也刚入行没两年,水平差)

然后各种查资料,发现少之又少,所以来补充一点资料方便后人查询

开发步骤:首先你拿到设备的时候要厂家要到开发包,就是类似于demo之类的东西,然后运行一下,找到关键的项目(扫描枪找到调用了扫描头的demo就行了)

然后查看源码,可以看到调用扫描头其实就是获取广播,获取到了广播然后提取广播里传过来的信息就行了,一般是一串字符串。然后你就可以做自己想做的事情了

当时我发现手持PDA怎么都连不上eclipse,后来发现只要导出apk在设备上运行就行了,其实和普通app开发一样的(这个问题我纠结了很久)

下面贴一个代码出来吧(重要的只有广播那一点,其他的只是demo的业务逻辑)

  public class MainActivity extends Activity {private final static String SCAN_ACTION = ScanManager.ACTION_DECODE;//default actionprivate ActionBar actionBar;private EditText showScanResult;private Button btn;private Button mScan;private Button mClose;private int type;private int outPut;private Vibrator mVibrator;private ScanManager mScanManager;private SoundPool soundpool = null;private int soundid;private String barcodeStr;private boolean isScaning = false;private BroadcastReceiver mScanReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {// TODO Auto-generated method stubisScaning = false;soundpool.play(soundid, 1, 1, 0, 0, 1);showScanResult.setText("");mVibrator.vibrate(100);byte[] barcode = intent.getByteArrayExtra(ScanManager.DECODE_DATA_TAG);int barcodelen = intent.getIntExtra(ScanManager.BARCODE_LENGTH_TAG, 0);byte temp = intent.getByteExtra(ScanManager.BARCODE_TYPE_TAG, (byte) 0);android.util.Log.i("debug", "----codetype--" + temp);barcodeStr = new String(barcode, 0, barcodelen);showScanResult.setText(barcodeStr);}};@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);Window window = getWindow();window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);setContentView(R.layout.activity_main);mVibrator = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);actionBar = getActionBar();  actionBar.show();setupView();}private void initScan() {// TODO Auto-generated method stubmScanManager = new ScanManager();mScanManager.openScanner(); mScanManager.switchOutputMode( 0);soundpool = new SoundPool(1, AudioManager.STREAM_NOTIFICATION, 100); // MODE_RINGTONEsoundid = soundpool.load("/etc/Scan_new.ogg", 1);}private void setupView() {// TODO Auto-generated method stubshowScanResult = (EditText) findViewById(R.id.scan_result);btn = (Button) findViewById(R.id.manager);btn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubif(mScanManager.getTriggerMode() != Triggering.CONTINUOUS)mScanManager.setTriggerMode(Triggering.CONTINUOUS);}});mScan = (Button) findViewById(R.id.scan);mScan.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stub//if(type == 3)mScanManager.stopDecode();isScaning = true;try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}mScanManager.startDecode();}});mClose = (Button) findViewById(R.id.close);mClose.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stub// if(isScaning) {//  isScaning = false;mScanManager.stopDecode();//} }});//btn.setVisibility(View.GONE);}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();}@Overrideprotected void onPause() {// TODO Auto-generated method stubsuper.onPause();if(mScanManager != null) {mScanManager.stopDecode();isScaning = false;}unregisterReceiver(mScanReceiver);}@Overrideprotected void onResume() {// TODO Auto-generated method stubsuper.onResume();initScan();showScanResult.setText("");IntentFilter filter = new IntentFilter();int[] idbuf = new int[]{PropertyID.WEDGE_INTENT_ACTION_NAME, PropertyID.WEDGE_INTENT_DATA_STRING_TAG};String[] value_buf = mScanManager.getParameterString(idbuf);if(value_buf != null && value_buf[0] != null && !value_buf[0].equals("")) {filter.addAction(value_buf[0]);} else {filter.addAction(SCAN_ACTION);}registerReceiver(mScanReceiver, filter);}@Overrideprotected void onStart() {// TODO Auto-generated method stubsuper.onStart();}@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {// TODO Auto-generated method stubreturn super.onKeyDown(keyCode, event);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.//getMenuInflater().inflate(R.menu.activity_main, menu);MenuItem settings = menu.add(0, 1, 0, R.string.menu_settings).setIcon(R.drawable.ic_action_settings);  // 绑定到actionbar  //SHOW_AS_ACTION_IF_ROOM 显示此项目在动作栏按钮如果系统决定有它。 可以用1来代替MenuItem version = menu.add(0, 2, 0, R.string.menu_settings);settings.setShowAsAction(1);version.setShowAsAction(0);return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {// TODO Auto-generated method stubswitch (item.getItemId()) {case 1:try{Intent intent = new Intent("android.intent.action.SCANNER_SETTINGS");intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivity(intent);} catch (ActivityNotFoundException e) {// TODO: handle exceptione.printStackTrace();}break;case 2:PackageManager pk = getPackageManager();PackageInfo pi;try {pi = pk.getPackageInfo(getPackageName(), 0);Toast.makeText(this, "V" +pi.versionName , Toast.LENGTH_SHORT).show();} catch (NameNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}break;}return super.onOptionsItemSelected(item);}
}

关于手持设备PDA的开发相关推荐

  1. 【小白看世界】PDA软件开发是什么?

    不知道有多少人和我一样,看到PDA软件开发的时候想,P D A 是啥高级玩意,为啥我听都没听过啊?其实我们不应该分开读,而应该连起来读--pad.是的,就是平板电脑!哈哈. 所以pad软件开发,其实就 ...

  2. 监听pda扫描_东大集成PDA扫描开发

    void scanner(UIDatadata) { int notifyId=data.getNotifyId(); ScanData scanData= (ScanData) data.getDa ...

  3. Android扫描枪(PDA)开发

    // 最近在负责PDA的开发,在扫描事件的处理上,花费了一些时间,但是,最终功夫不负有心人,总算找到一个好点的解决方案,不说了,上代码.// 该文本框添加扫描事件.// 但是该扫描事件有一个明显的bu ...

  4. PDA 开发入门大全

                 PDA 入门开发的一个DEMO       --类别:总结 --charry0110(晓风残月 本程序基于 mobile5.0 的 PPC 开发 , 使用语言 C# 我的机器 ...

  5. Sencha touch 开发指南

    Sencha touch 开发指南 本文主要介绍如何使用Sencha Touch为手持设备进行应用开发,主要是针对iPhone这样的高端手机,我们会通过一个详细的例子来介绍整个开发的流程. Sench ...

  6. 软件开发工程师个人简历模板3篇

        软件开发工程师个人简历模板篇1 姓  名: 张先生 性  别: 男 婚姻状况: 未婚 民  族: 汉族 户  籍: 广东-珠海 年  龄: 28 现所在地: 广东-珠海 身  高: 168cm ...

  7. Java企业级应用软件开发

    一.什么是软件开发? 计算机系统开发:包括硬件开发和软件开发. 软件开发可以分为系统级开发和应用级开发. 系统级开发:如开发操作系统.驱动程序.嵌入式系统开发: 更多是用:汇编.C.C++等底层语言. ...

  8. .NET Compact Framework 移动开发步步来(3)

    十分抱歉呀, 这段时间期末了, 像我们这类有学历教育的学校, 所有老师都开始忙起来了, 忙出卷呀, 忙改卷, 忙一些与期末相当的事情. 好不容易在这个新年的时候, 总算有了几天的假日. 所以我就在这个 ...

  9. .net Compact Framework 程序设计起步(智能设备的程序设计)

    什么是智能设备?PDA,SmartPhone等MS一系列与手持设备相关的产品都可以叫做智能设备. 可以有很多方法开发与设计PDA等智能设备的程序,这里只讨论.net Compact Framework ...

最新文章

  1. Linux端日志加密,Linux学习--第十三天--日志、系统运行级别、grub加密
  2. 【topoSort拓扑排序】1424. 奖金(简单题目看拓扑排序)
  3. .net中的4种事务总结
  4. bzoj3959(LCT)
  5. WebKit Page对象的分析
  6. skip page cache - SAP gateway的调试
  7. R金融统计:收益、随机行走和模拟
  8. 玩转 SpringBoot 2 快速整合 | RESTful Api 篇
  9. 协同办公产品好不好用,得看这 25 项指标
  10. java jaxb 格式化_XStream、JAXB 日期(Date)、数字(Number)格式化输出xml
  11. Windows中更新python模块的命令
  12. 在Asp.net中弹出对话框,确定后跳转到其他页面
  13. python字典输出键值对_Python:遍历字典 键值对
  14. 通过puppet hiera配置bigtop大数据集群
  15. python 中文转带音调的拼音
  16. 清默网络——动态访问列表
  17. python数据分析与应用实训题答案第七章_应用回归分析,第7章课后习题参考答案...
  18. RTK点放样用CORS有多简便?附全流程
  19. Linux版idea沙盒化运行,游戏《Minecraft》IntelliJ下模组开发环境ForgeGradle的使用教程...
  20. 利用Blogger博客写文章月入过万美刀 -爱好写作的注意看啦!

热门文章

  1. AS400 EBCDIC码转UTF-8码
  2. 自从用了低代码开发,开发效率提升10倍
  3. 单片机教学打铃控制器C语言
  4. 小米蓝牙温度计2接入home assistant
  5. 05 linux shell脚本 变量的取用echo;变量的设置和修改;变量的使用规范以及示例
  6. 分享一个火遍全网的 Python 框架,爆赞!
  7. Android地址(省市区)、日期、时间滚轮选择器简单封装
  8. 弘辽科技:淘宝商品标题怎么写?如何选词?
  9. HH SaaS电商系统的各种编号(编码/代码/代号)设计
  10. Node 学习 | Day03 express (初识Express、Express 路由、Express 中间件、使用 Express 写接口)