项目ITP(二) 二维码 拿起你的手机装一装,扫一扫 【每日一搏】
正文
上文,我们讲了 二维码生成 解码
这次我们就用 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(二) 二维码 拿起你的手机装一装,扫一扫 【每日一搏】相关推荐
- 项目ITP(一) 二维码
2019独角兽企业重金招聘Python工程师标准>>> 前言 系列文章:[传送门] 上几周碌碌无为,不行啊不行啊.博客园,不知道你几时改版.老家了,我不会忘记你呢.呵呵,我也会在os ...
- 一键换机显示二维码错误_【丽迪资讯】装路由器,忘记上网账号跟密码?别担心360amp;磊科智能路由器一键换机轻松搞定!...
问:刚买了路由器宽带帐号密码设置了好多次都显示帐号或密码有错误(常见的错误代码是拨号678),宽带帐号密码反复设置了好多次一直不成功,因为宽带帐号密码这个事情给运营商客服也打过好多次电话,但就是显示帐 ...
- 初学安卓之二维码的简单实现
初学安卓之二维码的简单实现 前言 生成二维码 准备工作 生成简单二维码 修改二维码颜色 在二维码中心添加logo图片 GenerateQRcode完整代码 扫描二维码 准备工作 打开真机调试 集成工作 ...
- 微信扫描二维码快速登录网站
在近期的一个项目中用到了微信扫描注册.登录网站功能所以整理了下希望对读者有帮助. 首先,你需要有一个没有绑定微信.微信公众平台的邮箱注册成为微信开放平台开发者,在管理中心创建移动应用.或者网站应用获得 ...
- java实现生成二维码及扫码登录
java实现生成二维码及扫码登录 1. 场景描述 2. 实现思路 3. 代码实现过程 3.1 pom.xml 3.2 二维码工具类 3.3 生成二维码并下载为图片 3.4 扫码登录 1. 场景描述 ...
- 小程序实现扫码识别二维码内容
前言 在开发程序过程中经常和二维码打交道,经常要查看二维码的内容是什么,所以决定自己开发一个可以识别二维码,生成二维码的小工具. 一.项目展示 用户可以识别生活中常见的支持条码.二维码.DataMat ...
- wechat-0050,微信公众号,带参数的二维码获取与扫码事件推送
demo:https://github.com/wenrongyao/wechat-demo 摘要:这篇帖子讲述如何获取带参数的二维码,以及扫码带参数的二维码后的事件接收. 微信开发者文档:https ...
- Day212.OAuth2、微信二维码登入注册功能、用户登录信息前后端供、讲师列表前后端 -谷粒学院
谷粒学院 OAuth2的使用场景 一.OAuth2解决什么问题 1.OAuth2提出的背景 照片拥有者想要在云冲印服务上打印照片,云冲印服务需要访问云存储服务上的资源 2.图例 资源拥有者:照片拥有者 ...
- 【Android】多功能二维码实现思路,自动连接WI-FI
现在项目的需求是: 1. 带AP功能的机顶盒端能生成二维码,供手机客户端扫描 1.1 如果用非特定应用(手机助手)扫描,则跳转下载手机助手界面 1.2 如果用手机助手扫描,自动连接到该机顶盒的WI-F ...
最新文章
- 关于“如何破坏单例“我说了好几种方式,面试官却说:我其实随便问问,没想到你真会
- php将pdf文件存入数据库,关于tcpdf:在我的php数据库中制作pdf文件
- c语言环境窗口组成,如何搭建C语言环境
- 动态链接MFC引发的血案
- 信息学奥赛一本通C++语言——1032:大象喝水
- 动态规划复习-HDU1081
- android开发自定义选择器,创建自定义android选择器
- 一个模型搞定多个CTR业务!阿里STAR网络介绍(附代码实现)
- 网络故障排除连载之四:OSPF故障排除
- html5设计基础报告,《网页设计与制作基础》实验报告.doc
- Android如何修改手机文件名称
- 架构重构:通过以任务为中心的视角看软件的进化
- 《Head First 系列图书》大集合,附案例分析,免积分下载
- ps人像美白磨皮教程,ps如何修人像美白磨
- java jts点到面的距离_jts-空间索引
- 关于汽车隔音和音响改装,难听,但确是实话
- 解决无法启动ROS节点“ERROR:cannot launch node of type [map_server/map_server]:map_server”的问题
- codevs3287货车运输[倍增]
- 计算机系统硬盘拷贝,不用互助,轻松搞定新旧电脑间系统完整复制或硬盘更换!...
- linux下制作ext3格式的tf卡