一周左右终于将二维码生成和扫描功能给实现了,终于能舒缓一口气了,从一开始的疑惑为啥不同的扫码客户端为啥扫出来的效果不同?通用的扫描器扫出来就是一个下载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:

  1. using UnityEngine;
  2. using System.Collections;
  3. public class NewBehaviourScript : MonoBehaviour {
  4. private AndroidJavaObject activity;
  5. private string result="http://blog.csdn.net/dingxiaowei2013";  //result用于接收二维码的返回值
  6. void Start()
  7. {
  8. AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
  9. activity = jc.GetStatic<AndroidJavaObject>("currentActivity");
  10. }
  11. void OnGUI()
  12. {
  13. //点击扫码调用Android方法
  14. if (GUI.Button(new Rect(Screen.width / 2 - 50, 20, 100, 50), "点击扫码"))
  15. {
  16. activity.Call("Show");
  17. }
  18. GUI.Label(new Rect(Screen.width / 2 - 100, 120, 300, 20), result);
  19. }
  20. //这个是Android调用的方法
  21. void GetString(string str)
  22. {
  23. result = str;
  24. }
  25. }

Android:

  1. package com.example.qr_codescan;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.widget.ImageView;
  5. import android.widget.TextView;
  6. import com.unity3d.player.UnityPlayer;
  7. import com.unity3d.player.UnityPlayerActivity;
  8. public class MainActivity extends UnityPlayerActivity {
  9. private final static int SCANNIN_GREQUEST_CODE = 1;
  10. /**
  11. * 显示扫描结果
  12. */
  13. private TextView mTextView ;
  14. /**
  15. * 显示扫描拍的图片
  16. */
  17. private ImageView mImageView;
  18. @Override
  19. protected void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. //setContentView(R.layout.activity_main);
  22. //      mTextView = (TextView) findViewById(R.id.result);
  23. //      mImageView = (ImageView) findViewById(R.id.qrcode_bitmap);
  24. //
  25. //      //点击按钮跳转到二维码扫描界面,这里用的是startActivityForResult跳转
  26. //      //扫描完了之后调到该界面
  27. //      Button mButton = (Button) findViewById(R.id.button1);
  28. //      mButton.setOnClickListener(new OnClickListener() {
  29. //
  30. //          @Override
  31. //          public void onClick(View v) {
  32. //              Intent intent = new Intent();
  33. //              intent.setClass(MainActivity.this, MipcaActivityCapture.class);
  34. //              intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  35. //              startActivityForResult(intent, SCANNIN_GREQUEST_CODE);
  36. //          }
  37. //      });
  38. }
  39. public void Show()
  40. {
  41. Intent intent = new Intent();
  42. intent.setClass(MainActivity.this, MipcaActivityCapture.class);
  43. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  44. startActivityForResult(intent, SCANNIN_GREQUEST_CODE);
  45. }
  46. @Override
  47. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  48. super.onActivityResult(requestCode, resultCode, data);
  49. switch (requestCode) {
  50. case SCANNIN_GREQUEST_CODE:
  51. if(resultCode == RESULT_OK){
  52. Bundle bundle = data.getExtras();
  53. //显示扫描到的内容
  54. //mTextView.setText(bundle.getString("result"));
  55. //显示
  56. //mImageView.setImageBitmap((Bitmap) data.getParcelableExtra("bitmap"));
  57. UnityPlayer.UnitySendMessage("Cube","GetString",bundle.getString("result"));
  58. }
  59. break;
  60. }
  61. }
  62. }

导出插件:

然后我导出成插件,之前一个扫码插件是EasyCodeScanner,然后我今后的网名叫Aladdin,我也命名一个扫码的Android插件,为AladdinCodeScanner,日后可能继续完成添加上IOS的扫码功能,完善这一插件,我这也是深受EasyCodeScanner的折磨才决定自食其力!之前好不容易找到一个扫码的插件EasyCodeScanner,结果发现会出错还有关键的是没有实现Android的扫码功能,Android部分的方法没实现,所以也促成了我自己写插件的念头,今天如愿以偿,一身轻松!时间不早,感觉熬夜身体有点吃不消了,身体是本钱,明儿继续将工程补上!晚安!
 

工程源码:

http://down.51cto.com/data/1156726

[Unity3D]自制UnityForAndroid二维码扫描插件的更多相关文章

  1. ios二维码扫描插件,适配当前主流扫描软件,自定义扫描界面。

            二维码介绍: 二维码(QR(Quick Response)code),又称二维条码,最早起源于日本. 它是用特定的几何图形按一定规律在平面(二维方向)上分布的黑白相间的图形,是所有信息 ...

  2. phonegap二维码扫描插件

    原文出处:http://rensanning.iteye.com/blog/2034026 谈谈我使用这个的体会吧; git地址 https://github.com/wildabeast/Barco ...

  3. PhoneGap(二维码扫描 )

    关于 phoneGap 如何做 二维码扫描 1.        先配置好, 环境 http://coenraets.org/blog/cordova-phonegap-3-tutorial/http: ...

  4. 【React Native 实战】二维码扫描

    1.前言今天介绍React Native来实现二维码扫描的功能.首先我们要借助第三方插件react-native-barcode-scanner-universal来实现跨平台二维码扫描. 2.介绍 ...

  5. H5混合开发二维码扫描以及调用本地摄像头

    今天主管给了我个需求,说要用混合开发,用H5调用本地摄像头进行扫描二维码,我之前有做过原生安卓的二维码扫一扫,主要是通过调用zxing插件进行操作的,其中还弄了个闪光灯.但是纯H5的没接触过,心里没底 ...

  6. angularjs+ionic+'h5+'实现二维码扫描功能

    今天给大家分享一下基于angularjs与ionic框架实现手机二维码扫描的功能.没有用到cordova等任何插件,h5+实现的. 开发工具:hbuilder 首先,需要在hbuilder项目下面的配 ...

  7. 二维码生成插件qrious及网站扫码登录的一些理解

    什么是二维码 ​ 二维码又称QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型. ...

  8. XAMARIN ANDROID 二维码扫描示例

    现在二维码的应用越来越普及,二维码扫描也成为手机应用程序的必备功能了.本文将基于 Xamarin.Android 平台使用 ZXing.Net.Mobile  做一个简单的 Android 条码扫描示 ...

  9. 有关iOS系统中调用相机设备实现二维码扫描功能的注意点(3/3)

    今天我们接着聊聊iOS系统实现二维码扫描的其他注意点. 大家还记得前面我们用到的输出数据的类对象吗?AVCaptureMetadataOutput,就是它!如果我们需要实现目前主流APP扫描二维码的功 ...

随机推荐

  1. Swift3.0变化分享

    Swift 3.0 做出的改变很大,在这篇文章中,我将尽我所能,利用代码样例给大家解释Swift 3.0最重要(要命)的改变,希望大家能够做好升级Swift 3.0 的准备.Swift 3.0的改变不 ...

  2. 常用function() 收集

    1.随机数生成函数(来源-微信支付demo案例) /** * * 产生随机字符串,不长于32位 * @param int $length * @return 产生的随机字符串 */ public st ...

  3. 最长回文子串(Longest Palindromic Substring)

    这算是一道经典的题目了,最长回文子串问题是在一个字符串中求得满足回文子串条件的最长的那一个.常见的解题方法有三种: (1)暴力枚举法,以每个元素为中心同时向左和向右出发,复杂度O(n^2): (2)动 ...

  4. xml中处理大于小与符号

    原符号   <    <=    >    >=     &      '       " 替换符号 < <= > >= & ...

  5. [Machine Learning] logistic函数和softmax函数

    简单总结一下机器学习最常见的两个函数,一个是logistic函数,另一个是softmax函数,若有不足之处,希望大家可以帮忙指正.本文首先分别介绍logistic函数和softmax函数的定义和应用, ...

  6. 【转】FlashBack总结之闪回查询与闪回表

    本文主要介绍利用UNDO表空间的闪回技术,主要包括:闪回表,闪回版本查询,闪回事务查询,闪回查询.这些闪回技术实现从回滚段中读取表中一定时间内操作过的数据,可用来进行数据比对,或者修正意外提交造成的错 ...

  7. STM32f103 定时器之编码器接口模式

    背景 买了个Arduino的旋转编码器模块,配合STM32定时器的编码器模式实现了旋转角度以及圈数的计数.这种旋转编码器我能想到的实际应用场景暂时只有实体音量旋钮,鼠标的滚轮等,所以只实现了计数.阅读 ...

  8. python爬虫小项目实战

  9. VMware中解决ubuntu不能连接网络问题。(亲测有效)

    1.保证自己的电脑能正常连接网络 2.打开关于VMware的所有服务(一般情况服务设置的是手动启动,需要自己打开)如图: 3.对VMware虚拟机进行网络设置:右击ubuntn选择设置 4.选择网络适 ...

  10. 解决 release-stripped.ap_' specified for property 'resourceFile' does not exist.

    设置buildTypes里的release的shrinkResources为false即可,如果是 release-stripped.ap_' specified for property 'reso ...