[Unity3D]自制UnityForAndroid二維碼掃描插件

一週左右終於將二維碼生成和掃描功能給實現了,終於能舒緩一口氣了,從一開始的疑惑爲啥不一樣的掃碼客戶端爲啥掃出來的效果不一樣?通用的掃描器掃出來就是一個下載APK,自制的掃描器掃出來是想要的有效信息,而後分析出來其實二維碼無非就是記錄了一個簡單的信息,通常是URL,而後本身在URL上面作文章!得知了需求以後而後開始着手作二維碼的生成,用了開源框架QRCode,而後解析ZXing,都是站在前人的肩膀上繼續作下去,我就沒有深刻研究二維碼的深層次方面的東西,大概只知道生成是根據一個二維Bool數組而後繪製像素點形參一個方形的圖片,其中三個角跟中間一塊是不包含信息的三個角是三個小矩形,是爲了定位位置,正中間有一個方形區域沒有信息是爲了放置Logo用的,相比你們也比較清楚,都見過,如今餐廳,地鐵上基本都有掃一掃的標誌,呵呵,二維碼已經成爲一個通用的宣傳手段!而後我接到這個任務以後就要一步一步的分析問題到解決問題,從生成一張二維碼圖片開始,到批量生成再到批量生成頁面,而且每一個頁面中要嵌套與之對應的二維碼,而後再到學習Android,由於以前沒怎麼接觸過Java方向的東西,而後簡單的看了兩天Android,對Android開發有了一個大致的認識和了解,而後再到學習Android和Unity的交互,再到作出Android插件等過程,截止今晚終於將功能實現,沒有什麼解決不了的問題,只要動手,動腦,一切都OK!java

接下來我就分享一下製做過程,關於生成二維碼的我當時寫了一個教程,結果還被抨擊了,說.net程序員就你這水平...對於這個網友,個人確很慚愧,個人水平有限,寫的內容的確比較淺顯,沒法知足你求高深技術的法眼,但我寫出來是爲了更過廣大初學者,但願能給他們一點入門的幫助!我想說的人外有人,不要以爲本身厲害就看不起新手或者沒你水平高的人,說不定未來他就有可能技術比你厲害!總而言之,或許對大牛而言,這個二維碼的生成和解析很簡單,但我仍是堅持下下來,一來也是對本身這一週多時間的一個小結,二來仍是前面那句話,但願和廣大初學者一塊兒學習和進步,一塊兒交流!android

二維碼生成和交互能夠看我以前寫的文章:二維碼生成 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:

[csharp] view plaincopyprint?在CODE上查看代碼片派生到個人代碼片ide

  1. using UnityEngine;  學習

  2. using System.Collections;  this

  3.   

  4. public class NewBehaviourScript : MonoBehaviour {  spa

  5.   

  6.     private AndroidJavaObject activity;  .net

  7.     private string result="http://blog.csdn.net/dingxiaowei2013";  //result用於接收二維碼的返回值  

  8.     void Start()  

  9.     {  

  10.         AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");  

  11.         activity = jc.GetStatic<AndroidJavaObject>("currentActivity");  

  12.     }  

  13.   

  14.     void OnGUI()  

  15.     {  

  16.         //點擊掃碼調用Android方法  

  17.         if (GUI.Button(new Rect(Screen.width / 2 - 50, 20, 100, 50), "點擊掃碼"))  

  18.         {  

  19.             activity.Call("Show");  

  20.         }  

  21.         GUI.Label(new Rect(Screen.width / 2 - 100, 120, 300, 20), result);  

  22.     }  

  23.   

  24.     //這個是Android調用的方法  

  25.     void GetString(string str)  

  26.     {  

  27.         result = str;  

  28.     }  

  29. }  


Android:

[java] view plaincopyprint?在CODE上查看代碼片派生到個人代碼片

  1. package com.example.qr_codescan;  

  2.   

  3.   

  4. import android.content.Intent;  

  5. import android.os.Bundle;  

  6. import android.widget.ImageView;  

  7. import android.widget.TextView;  

  8.   

  9. import com.unity3d.player.UnityPlayer;  

  10. import com.unity3d.player.UnityPlayerActivity;  

  11.   

  12.   

  13.   

  14. public class MainActivity extends UnityPlayerActivity {  

  15.     private final static int SCANNIN_GREQUEST_CODE = 1;  

  16.     /** 

  17.      * 顯示掃描結果 

  18.      */  

  19.     private TextView mTextView ;  

  20.     /** 

  21.      * 顯示掃描拍的圖片 

  22.      */  

  23.     private ImageView mImageView;  

  24.       

  25.   

  26.     @Override  

  27.     protected void onCreate(Bundle savedInstanceState) {  

  28.         super.onCreate(savedInstanceState);  

  29.         //setContentView(R.layout.activity_main);  

  30.           

  31. //      mTextView = (TextView) findViewById(R.id.result);   

  32. //      mImageView = (ImageView) findViewById(R.id.qrcode_bitmap);  

  33. //        

  34. //      //點擊按鈕跳轉到二維碼掃描界面,這裏用的是startActivityForResult跳轉  

  35. //      //掃描完了以後調到該界面  

  36. //      Button mButton = (Button) findViewById(R.id.button1);  

  37. //      mButton.setOnClickListener(new OnClickListener() {  

  38. //            

  39. //          @Override  

  40. //          public void onClick(View v) {  

  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. //      });  

  47.     }  

  48.       

  49.     public void Show()  

  50.     {  

  51.         Intent intent = new Intent();  

  52.         intent.setClass(MainActivity.this, MipcaActivityCapture.class);  

  53.         intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  

  54.         startActivityForResult(intent, SCANNIN_GREQUEST_CODE);  

  55.     }  

  56.       

  57.       

  58.       

  59.     @Override  

  60.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  

  61.         super.onActivityResult(requestCode, resultCode, data);  

  62.         switch (requestCode) {  

  63.         case SCANNIN_GREQUEST_CODE:  

  64.             if(resultCode == RESULT_OK){  

  65.                 Bundle bundle = data.getExtras();  

  66.                 //顯示掃描到的內容  

  67.                 //mTextView.setText(bundle.getString("result"));  

  68.                 //顯示  

  69.                 //mImageView.setImageBitmap((Bitmap) data.getParcelableExtra("bitmap"));  

  70.                 UnityPlayer.UnitySendMessage("Cube","GetString",bundle.getString("result"));  

  71.             }  

  72.             break;  

  73.         }  

  74.     }     

  75.   

  76. }  


導出插件:

而後我導出成插件,以前一個掃碼插件是EasyCodeScanner,而後我從此的網名叫Aladdin,我也命名一個掃碼的Android插件,爲AladdinCodeScanner,往後可能繼續完成添加上IOS的掃碼功能,完善這一插件,我這也是深受EasyCodeScanner的折磨才決定自食其力!以前好不容易找到一個掃碼的插件EasyCodeScanner,結果發現會出錯還有關鍵的是沒有實現Android的掃碼功能,Android部分的方法沒實現,因此也促成了我本身寫插件的念頭,今天如願以償,一身輕鬆!時間不早,感受熬夜身體有點吃不消了,身體是本錢,明兒繼續將工程補上!晚安!

工程源碼:

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

相關文章
相關標籤/搜索