正文

  上文,我们讲了 二维码生成 解码

  这次我们就用 android 来扫一下,实现android 扫二维码。

  

    下载扫一扫

包结构-介绍

  

  #com.zxing.xx   这是 zxing 库提供的

  #BarCodeActivity

实战

  一个按钮,一个显示结果的界面

package sedion.jeffli.activity;import sedion.jeffli.itp.R;import com.zxing.activity.CaptureActivity;import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;public class BarCodeActivity extends Activity
{private TextView resultTextView;            //返回显示结果(以后没有用的)private Button   scanBarCodeButton;@Overridepublic void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.barcode);resultTextView = (TextView) this.findViewById(R.id.tv_scan_result);scanBarCodeButton = (Button) this.findViewById(R.id.btn_scan_barcode);scanBarCodeButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//打开扫描界面Intent openCameraIntent = new Intent(BarCodeActivity.this,CaptureActivity.class);startActivityForResult(openCameraIntent, 0);}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);//判断处理结果,并显示if (resultCode == RESULT_OK) {Bundle bundle = data.getExtras();String scanResult = bundle.getString("result");//Toast.makeText(this, "result", Toast.LENGTH_LONG).show();resultTextView.setText(scanResult);}}
}

  #new Intent(BarCodeActivity.this,CaptureActivity.class);

     打开扫描界面 -> CaptureActivity (这个是进行扫描的activity)

   #resultCode == RESULT_OK

    判断是否成功,成功显示结果。

你会看到:

  

下面是扫描的界面:

  CaptureActivity(zxing库提供,nice)

package com.zxing.activity;import java.io.IOException;
import java.util.Vector;import sedion.jeffli.itp.R;
import android.app.Activity;
import android.content.Intent;
import android.content.res.AssetFileDescriptor;
import android.graphics.Bitmap;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Handler;
import android.os.Vibrator;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder.Callback;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;import com.google.zxing.BarcodeFormat;
import com.google.zxing.Result;
import com.zxing.camera.CameraManager;
import com.zxing.decoding.CaptureActivityHandler;
import com.zxing.decoding.InactivityTimer;
import com.zxing.view.ViewfinderView;
/*** Initial the camera* @author Ryan.Tang*/
public class CaptureActivity extends Activity implements Callback {private CaptureActivityHandler handler;private ViewfinderView viewfinderView;private boolean hasSurface;private Vector<BarcodeFormat> decodeFormats;private String characterSet;private InactivityTimer inactivityTimer;private MediaPlayer mediaPlayer;private boolean playBeep;private static final float BEEP_VOLUME = 0.10f;private boolean vibrate;private Button cancelScanButton;/** Called when the activity is first created. */@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.camera);//ViewUtil.addTopView(getApplicationContext(), this, R.string.scan_card);CameraManager.init(getApplication());viewfinderView = (ViewfinderView) findViewById(R.id.viewfinder_view);cancelScanButton = (Button) this.findViewById(R.id.btn_cancel_scan);hasSurface = false;inactivityTimer = new InactivityTimer(this);}@Overrideprotected void onResume() {super.onResume();SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view);SurfaceHolder surfaceHolder = surfaceView.getHolder();if (hasSurface) {initCamera(surfaceHolder);} else {surfaceHolder.addCallback(this);surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);}decodeFormats = null;characterSet = null;playBeep = true;AudioManager audioService = (AudioManager) getSystemService(AUDIO_SERVICE);if (audioService.getRingerMode() != AudioManager.RINGER_MODE_NORMAL) {playBeep = false;}initBeepSound();vibrate = true;//quit the scan viewcancelScanButton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {CaptureActivity.this.finish();}});}@Overrideprotected void onPause() {super.onPause();if (handler != null) {handler.quitSynchronously();handler = null;}CameraManager.get().closeDriver();}@Overrideprotected void onDestroy() {inactivityTimer.shutdown();super.onDestroy();}/*** Handler scan result* @param result* @param barcode*/public void handleDecode(Result result, Bitmap barcode) {inactivityTimer.onActivity();playBeepSoundAndVibrate();String resultString = result.getText();//FIXMEif (resultString.equals("")) {Toast.makeText(CaptureActivity.this, "Scan failed!", Toast.LENGTH_SHORT).show();}else {
//            System.out.println("Result:"+resultString);Intent resultIntent = new Intent();Bundle bundle = new Bundle();bundle.putString("result", resultString);resultIntent.putExtras(bundle);this.setResult(RESULT_OK, resultIntent);}CaptureActivity.this.finish();}private void initCamera(SurfaceHolder surfaceHolder) {try {CameraManager.get().openDriver(surfaceHolder);} catch (IOException ioe) {return;} catch (RuntimeException e) {return;}if (handler == null) {handler = new CaptureActivityHandler(this, decodeFormats,characterSet);}}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}@Overridepublic void surfaceCreated(SurfaceHolder holder) {if (!hasSurface) {hasSurface = true;initCamera(holder);}}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {hasSurface = false;}public ViewfinderView getViewfinderView() {return viewfinderView;}public Handler getHandler() {return handler;}public void drawViewfinder() {viewfinderView.drawViewfinder();}private void initBeepSound() {if (playBeep && mediaPlayer == null) {// The volume on STREAM_SYSTEM is not adjustable, and users found it// too loud,// so we now play on the music stream.setVolumeControlStream(AudioManager.STREAM_MUSIC);mediaPlayer = new MediaPlayer();mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);mediaPlayer.setOnCompletionListener(beepListener);AssetFileDescriptor file = getResources().openRawResourceFd(R.raw.beep);try {mediaPlayer.setDataSource(file.getFileDescriptor(),file.getStartOffset(), file.getLength());file.close();mediaPlayer.setVolume(BEEP_VOLUME, BEEP_VOLUME);mediaPlayer.prepare();} catch (IOException e) {mediaPlayer = null;}}}private static final long VIBRATE_DURATION = 200L;private void playBeepSoundAndVibrate() {if (playBeep && mediaPlayer != null) {mediaPlayer.start();}if (vibrate) {Vibrator vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);vibrator.vibrate(VIBRATE_DURATION);}}/*** When the beep has finished playing, rewind to queue up another one.*/private final OnCompletionListener beepListener = new OnCompletionListener() {public void onCompletion(MediaPlayer mediaPlayer) {mediaPlayer.seekTo(0);}};}

你会看到:

  

总结

  android 二维码扫描

项目ITP(二) 二维码 拿起你的手机装一装,扫一扫 【每日一搏】相关推荐

  1. 项目ITP(一) 二维码

    2019独角兽企业重金招聘Python工程师标准>>> 前言 系列文章:[传送门] 上几周碌碌无为,不行啊不行啊.博客园,不知道你几时改版.老家了,我不会忘记你呢.呵呵,我也会在os ...

  2. 一键换机显示二维码错误_【丽迪资讯】装路由器,忘记上网账号跟密码?别担心360amp;磊科智能路由器一键换机轻松搞定!...

    问:刚买了路由器宽带帐号密码设置了好多次都显示帐号或密码有错误(常见的错误代码是拨号678),宽带帐号密码反复设置了好多次一直不成功,因为宽带帐号密码这个事情给运营商客服也打过好多次电话,但就是显示帐 ...

  3. 初学安卓之二维码的简单实现

    初学安卓之二维码的简单实现 前言 生成二维码 准备工作 生成简单二维码 修改二维码颜色 在二维码中心添加logo图片 GenerateQRcode完整代码 扫描二维码 准备工作 打开真机调试 集成工作 ...

  4. 微信扫描二维码快速登录网站

    在近期的一个项目中用到了微信扫描注册.登录网站功能所以整理了下希望对读者有帮助. 首先,你需要有一个没有绑定微信.微信公众平台的邮箱注册成为微信开放平台开发者,在管理中心创建移动应用.或者网站应用获得 ...

  5. java实现生成二维码及扫码登录

    java实现生成二维码及扫码登录 1. 场景描述 2. 实现思路 3. 代码实现过程 3.1 pom.xml 3.2 二维码工具类 3.3 生成二维码并下载为图片 3.4 扫码登录 1. 场景描述   ...

  6. 小程序实现扫码识别二维码内容

    前言 在开发程序过程中经常和二维码打交道,经常要查看二维码的内容是什么,所以决定自己开发一个可以识别二维码,生成二维码的小工具. 一.项目展示 用户可以识别生活中常见的支持条码.二维码.DataMat ...

  7. wechat-0050,微信公众号,带参数的二维码获取与扫码事件推送

    demo:https://github.com/wenrongyao/wechat-demo 摘要:这篇帖子讲述如何获取带参数的二维码,以及扫码带参数的二维码后的事件接收. 微信开发者文档:https ...

  8. Day212.OAuth2、微信二维码登入注册功能、用户登录信息前后端供、讲师列表前后端 -谷粒学院

    谷粒学院 OAuth2的使用场景 一.OAuth2解决什么问题 1.OAuth2提出的背景 照片拥有者想要在云冲印服务上打印照片,云冲印服务需要访问云存储服务上的资源 2.图例 资源拥有者:照片拥有者 ...

  9. 【Android】多功能二维码实现思路,自动连接WI-FI

    现在项目的需求是: 1. 带AP功能的机顶盒端能生成二维码,供手机客户端扫描 1.1 如果用非特定应用(手机助手)扫描,则跳转下载手机助手界面 1.2 如果用手机助手扫描,自动连接到该机顶盒的WI-F ...

最新文章

  1. 关于“如何破坏单例“我说了好几种方式,面试官却说:我其实随便问问,没想到你真会
  2. php将pdf文件存入数据库,关于tcpdf:在我的php数据库中制作pdf文件
  3. c语言环境窗口组成,如何搭建C语言环境
  4. 动态链接MFC引发的血案
  5. 信息学奥赛一本通C++语言——1032:大象喝水
  6. 动态规划复习-HDU1081
  7. android开发自定义选择器,创建自定义android选择器
  8. 一个模型搞定多个CTR业务!阿里STAR网络介绍(附代码实现)
  9. 网络故障排除连载之四:OSPF故障排除
  10. html5设计基础报告,《网页设计与制作基础》实验报告.doc
  11. Android如何修改手机文件名称
  12. 架构重构:通过以任务为中心的视角看软件的进化
  13. 《Head First 系列图书》大集合,附案例分析,免积分下载
  14. ps人像美白磨皮教程,ps如何修人像美白磨
  15. java jts点到面的距离_jts-空间索引
  16. 关于汽车隔音和音响改装,难听,但确是实话
  17. 解决无法启动ROS节点“ERROR:cannot launch node of type [map_server/map_server]:map_server”的问题
  18. codevs3287货车运输[倍增]
  19. 计算机系统硬盘拷贝,不用互助,轻松搞定新旧电脑间系统完整复制或硬盘更换!...
  20. linux下制作ext3格式的tf卡

热门文章

  1. 大脑构造图与功能解析_施工技术特辑 | 全套脚手架三维构造图解析
  2. python画彩色城墙_Python绘制城堡-(有惊喜!!!)
  3. (三)硕博生常用的英文文献下载的网站
  4. Bytom BIP-32协议和BIP-44协议解读
  5. keepalived介绍和配置
  6. struts2学习:配置篇值请求处理元素
  7. SQL中的多表查询,以及JOIN的顺序重要么?
  8. GTK+重拾--08 GTK+中的对话框
  9. SCCM 2012 Part 2 部署前AD准备
  10. 发个招聘的信息来激励自己