[Unity3D]自制UnityForAndroid二维码扫描插件
一周左右终于将二维码生成和扫描功能给实现了,终于能舒缓一口气了,从一开始的疑惑为啥不同的扫码客户端为啥扫出来的效果不同?通用的扫描器扫出来就是一个下载APK,自制的扫描器扫出来是想要的有效信息,然后分析出来其实二维码无非就是记录了一个简单的信息,一般是URL,然后自己在URL上面做文章!得知了需求之后然后开始着手做二维码的生成,用了开源框架QRCode,然后解析ZXing,都是站在前人的肩膀上继续做下去,我就没有深入研究二维码的深层次方面的东西,大概只知道生成是根据一个二维Bool数组然后绘制像素点形参一个方形的图片,其中三个角跟中间一块是不包含信息的三个角是三个小矩形,是为了定位位置,正中间有一个方形区域没有信息是为了放置Logo用的,相比大家也比较清楚,都见过,现在餐厅,地铁上基本都有扫一扫的标志,呵呵,二维码已经成为一个通用的宣传手段!然后我接到这个任务之后就要一步一步的分析问题到解决问题,从生成一张二维码图片开始,到批量生成再到批量生成页面,并且每个页面中要嵌套与之对应的二维码,然后再到学习Android,因为之前没怎么接触过Java方向的东西,然后简单的看了两天Android,对Android开发有了一个大体的认识和了解,然后再到学习Android和Unity的交互,再到做出Android插件等过程,截止今晚终于将功能实现,没有什么解决不了的问题,只要动手,动脑,一切都OK!
接下来我就分享一下制作过程,关于生成二维码的我当时写了一个教程,结果还被抨击了,说.net程序员就你这水平...对于这个网友,我的确很惭愧,我的水平有限,写的内容的确比较浅显,无法满足你求高深技术的法眼,但我写出来是为了更过广大初学者,希望能给他们一点入门的帮助!我想说的人外有人,不要觉得自己厉害就看不起新手或者没你水平高的人,说不定将来他就有可能技术比你厉害!总而言之,或许对大牛而言,这个二维码的生成和解析很简单,但我还是坚持下下来,一来也是对自己这一周多时间的一个小结,二来还是前面那句话,希望和广大初学者一起学习和进步,一起交流!
二维码生成和交互可以看我之前写的文章:二维码生成 http://blog.csdn.net/dingxiaowei2013/article/details/22925709,Unity和Android交互http://blog.csdn.net/dingxiaowei2013/article/details/24485937。在这基础之上,然后接着实现功能!
更多精彩内容请关注我的微博 @丁小未 转载请注明出处:http://blog.csdn.net/dingxiaowei2013/article/details/24677795
效果图:
手机扫描后的效果:
说明:这里是Unity界面调用Android的Java方法跳转Android开发的Activity视图,然后在Android中Java方法调用Unity再回到Unity界面。
源码
Unity:
- using UnityEngine;
- using System.Collections;
- public class NewBehaviourScript : MonoBehaviour {
- private AndroidJavaObject activity;
- private string result="http://blog.csdn.net/dingxiaowei2013"; //result用于接收二维码的返回值
- void Start()
- {
- AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
- activity = jc.GetStatic<AndroidJavaObject>("currentActivity");
- }
- void OnGUI()
- {
- //点击扫码调用Android方法
- if (GUI.Button(new Rect(Screen.width / 2 - 50, 20, 100, 50), "点击扫码"))
- {
- activity.Call("Show");
- }
- GUI.Label(new Rect(Screen.width / 2 - 100, 120, 300, 20), result);
- }
- //这个是Android调用的方法
- void GetString(string str)
- {
- result = str;
- }
- }
Android:
- package com.example.qr_codescan;
- import android.content.Intent;
- import android.os.Bundle;
- import android.widget.ImageView;
- import android.widget.TextView;
- import com.unity3d.player.UnityPlayer;
- import com.unity3d.player.UnityPlayerActivity;
- public class MainActivity extends UnityPlayerActivity {
- private final static int SCANNIN_GREQUEST_CODE = 1;
- /**
- * 显示扫描结果
- */
- private TextView mTextView ;
- /**
- * 显示扫描拍的图片
- */
- private ImageView mImageView;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- //setContentView(R.layout.activity_main);
- // mTextView = (TextView) findViewById(R.id.result);
- // mImageView = (ImageView) findViewById(R.id.qrcode_bitmap);
- //
- // //点击按钮跳转到二维码扫描界面,这里用的是startActivityForResult跳转
- // //扫描完了之后调到该界面
- // Button mButton = (Button) findViewById(R.id.button1);
- // mButton.setOnClickListener(new OnClickListener() {
- //
- // @Override
- // public void onClick(View v) {
- // Intent intent = new Intent();
- // intent.setClass(MainActivity.this, MipcaActivityCapture.class);
- // intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- // startActivityForResult(intent, SCANNIN_GREQUEST_CODE);
- // }
- // });
- }
- public void Show()
- {
- Intent intent = new Intent();
- intent.setClass(MainActivity.this, MipcaActivityCapture.class);
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- startActivityForResult(intent, SCANNIN_GREQUEST_CODE);
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- super.onActivityResult(requestCode, resultCode, data);
- switch (requestCode) {
- case SCANNIN_GREQUEST_CODE:
- if(resultCode == RESULT_OK){
- Bundle bundle = data.getExtras();
- //显示扫描到的内容
- //mTextView.setText(bundle.getString("result"));
- //显示
- //mImageView.setImageBitmap((Bitmap) data.getParcelableExtra("bitmap"));
- UnityPlayer.UnitySendMessage("Cube","GetString",bundle.getString("result"));
- }
- break;
- }
- }
- }
导出插件:
工程源码:
[Unity3D]自制UnityForAndroid二维码扫描插件的更多相关文章
- ios二维码扫描插件,适配当前主流扫描软件,自定义扫描界面。
二维码介绍: 二维码(QR(Quick Response)code),又称二维条码,最早起源于日本. 它是用特定的几何图形按一定规律在平面(二维方向)上分布的黑白相间的图形,是所有信息 ...
- phonegap二维码扫描插件
原文出处:http://rensanning.iteye.com/blog/2034026 谈谈我使用这个的体会吧; git地址 https://github.com/wildabeast/Barco ...
- PhoneGap(二维码扫描 )
关于 phoneGap 如何做 二维码扫描 1. 先配置好, 环境 http://coenraets.org/blog/cordova-phonegap-3-tutorial/http: ...
- 【React Native 实战】二维码扫描
1.前言今天介绍React Native来实现二维码扫描的功能.首先我们要借助第三方插件react-native-barcode-scanner-universal来实现跨平台二维码扫描. 2.介绍 ...
- H5混合开发二维码扫描以及调用本地摄像头
今天主管给了我个需求,说要用混合开发,用H5调用本地摄像头进行扫描二维码,我之前有做过原生安卓的二维码扫一扫,主要是通过调用zxing插件进行操作的,其中还弄了个闪光灯.但是纯H5的没接触过,心里没底 ...
- angularjs+ionic+'h5+'实现二维码扫描功能
今天给大家分享一下基于angularjs与ionic框架实现手机二维码扫描的功能.没有用到cordova等任何插件,h5+实现的. 开发工具:hbuilder 首先,需要在hbuilder项目下面的配 ...
- 二维码生成插件qrious及网站扫码登录的一些理解
什么是二维码 二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型. ...
- XAMARIN ANDROID 二维码扫描示例
现在二维码的应用越来越普及,二维码扫描也成为手机应用程序的必备功能了.本文将基于 Xamarin.Android 平台使用 ZXing.Net.Mobile 做一个简单的 Android 条码扫描示 ...
- 有关iOS系统中调用相机设备实现二维码扫描功能的注意点(3/3)
今天我们接着聊聊iOS系统实现二维码扫描的其他注意点. 大家还记得前面我们用到的输出数据的类对象吗?AVCaptureMetadataOutput,就是它!如果我们需要实现目前主流APP扫描二维码的功 ...
随机推荐
- linux系统运维常用基本命令详解
1.ls 文件属性: -:普通文件 d:目录文件 b:块设备 c:字符设备文件 l:符号连接文件 p:命令管道 s:套接字文件 文件权限: 9位数字,每3位一组 文件硬链接次数 ...
- Quartz.NET总结(五)基于Quartz.net 的开源任务管理平台
前面总结了很多,关于Quartz.net 的文章,介绍了如何使用Quartz.net.不清楚的朋友,可以看我之前的系列文章,http://www.cnblogs.com/zhangweizhong/c ...
- Docker 清理命令集锦
杀死所有正在运行的容器 复制代码代码如下: docker kill $(docker ps -a -q) 删除所有已经停止的容器 复制代码代码如下: docker rm $(docker ps -a ...
- 阿里云推送SDK在某些机型(某米为主)下崩溃问题的解决方法
引言 最近APP上线,遇到一个比较诡异的问题.最后竟然和dex文件有关,也是醉了,看来还得深入底层学习啊. 问题描述 在集成阿里推送SDK时,需要在Application中进行初始化,大多数Andro ...
- ORA-00600: 内部错误代码
运行时报ORA-00600: 内部错误代码, 参数:[qcsgpvc3],[],[],[],[],[],[],[],[],[],[],[] ,上网搜了但大多数都不行.无心插柳柳成荫,就在无奈想要 ...
- SpringMVC学习记录5
Springmvc流程中的扩展点有很多,可以在很多地方插入自己的代码逻辑达到控制流程的目的. 如果要对Controller的handler方法做统一的处理.我想应该会有很多选择,比如:@ModelAt ...
- Excel——使用OFFSET、MATCH、COUNTA实现二级菜单
如图所示,接下来提供两种办法实现: 1.将A.B.C.D定义为名称NAME. 2.设置一级菜单单元格数据有效性为NAME. 3.设置二级菜单格数据有效为: =OFFSET($A$1,MATCH($A6 ...
- DNA解链统计物理
来源:Kerson Huang, Lectures on Statistical Physics and Protein Folding, pp 24-25 把双链DNA解开就像拉拉链.设DNA有\( ...
- netlink优势
netlink相对其他应用进程和内核之间通信的方式(ioctrl或者系统文件等方式),全双工,可由内核发起,应用进程可用epoll监听,而其他方式只能由应用进程发起. 顺便记下隧道,隧道可以通过在ip ...
- Ajax我选择这样入门
什么是AJAX? AJAX的意思就是异步的JavaScript和XML.简而言之,它是使用XMLHttpRequest对象与服务器端通信的脚本语言.它可以发送及接收各种格式的信息,包括JSON.XML ...