归海一啸
管理员
管理员
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 喜欢达人
  • 原创写手
阅读:9519回复:34

Vuforia开发技巧十-二维码扫描与Vuforia结合

楼主#
更多 发布于:2015-07-28 14:27
在Unity3d中实现二维码扫描功能,可以使用现成的插件,也可以自己在Android端实现,然后打包成jar包。然后在Unity3d中使用 ,我使用两个Scene跳转,类似Android的两个Activity之间的跳转。其实实现这个功能,不管是使用别人的插件还是自己开发功能,主要的一个问题其实是Androidmanifest文件的组合。因为会有两个不同 的AndroidManifest.xml文件,而只会有一个会有用,因此需要对两个进行拼合。
1、Activity
两个Scene的跳转,类似Activity跳转,因此需要申明两个Activity,注意包名需要写全。
2、权限
Vuforia本身需要有Camera的权限,网络权限,正好二维码也需要,重复的只需要写一遍就好,对于有的插件还会有其他权限,这个视情况而定,注意取并集。
把AndroidManifest.xml文件贴出来:
<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player"
      android:installLocation="preferExternal"
      android:theme="@android:style/Theme.NoTitleBar"
    android:versionCode="1"
    android:versionName="1.0">
  <uses-feature android:name="android.hardware.camera" />
  <supports-screens
      android:smallScreens="true"
      android:normalScreens="true"
      android:largeScreens="true"
      android:xlargeScreens="true"
      android:anyDensity="true"/>
  <uses-permission android:name="android.permission.INTERNET" />
  <uses-permission android:name="android.permission.CAMERA" />
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <uses-permission android:name="android.permission.VIBRATE"/>
   
  <uses-feature android:name="android.hardware.camera" />
  <uses-feature android:name="android.hardware.camera.autofocus" />
   
  <application
      android:icon="@drawable/app_icon"
      android:label="@string/app_name"
      android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
      android:debuggable="false">
         
    <activity android:name="com.unity3d.player.UnityPlayerNativeActivity"
              android:label="@string/app_name">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
      <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
      <meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />
    </activity>
       
    <activity android:name="com.unity3d.player.VideoPlayer"
              android:label="@string/app_name"
              android:screenOrientation="portrait"
              android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
    </activity>
   
    <activity android:name="com.c4mprod.ezcodescanner.RootActivity"
        android:label="@string/app_name">
    </activity>
    <activity android:name="com.c4mprod.ezcodescanner.camera.CameraActivity" android:screenOrientation="sensor"/>
    <!--
            To support devices using the TI S3D library for stereo mode we must 
            add the following library.
            Devices that require this are: ODG X6 
        -->
    <uses-library android:name="com.ti.s3d" android:required="false" />
  </application>
   
  <!--package="com.c4mprod.ezcodescanner"
  android:versionCode="3"
  android:versionName="1.2">-->
   
  <!--<uses-sdk android:minSdkVersion="8" />
   
  <uses-permission android:name="android.permission.CAMERA" />
  <uses-permission android:name="android.permission.VIBRATE"/>
   
  <uses-feature android:name="android.hardware.camera" />
  <uses-feature android:name="android.hardware.camera.autofocus" />-->
</manifest>
再把主要的方法和具体实现贴出来:
Unity3d:
EasyCodeScanner.launchScanner( true, "Scanning...", -1, true);
public static void launchScanner(bool showUI, string defaultTxt, int symbol, bool forceLandscape) {
           
        if (instance==null) {
            Debug.LogError("EasyCodeScanner - launchScanner error : scanner must be initialized before.");
            return;
        }
        #if UNITY_IPHONE    
            //IPHONE - Display the UIViewController
            ConfigStruct conf = new ConfigStruct();
            conf.showUI = showUI;
            conf.defaultText = defaultTxt;
            conf.symbols = symbol;
            conf.forceLandscape = forceLandscape;
            launchScannerImpl(ref conf);
        #endif
           
        #if UNITY_ANDROID
            //ANDROID - Launch the Activity with an Intent
            AndroidJavaClass ajc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject ajo = ajc.GetStatic<AndroidJavaObject>("currentActivity");
           
            //In case RootActivity is the MAIN in the manifest
            //ajo.Call("launchScannerImpl", showUI, defaultTxt, symbol, forceLandscape);
           
            //In case RootActivity is not the MAIN activity in the manifest (multi-plugin)
            var jc = new AndroidJavaClass("com.c4mprod.ezcodescanner.RootActivity");
            jc.CallStatic("launchScannerImpl", ajo, showUI, defaultTxt, symbol, forceLandscape);
        #endif
       
    }
Android源码:
public class RootActivity extends UnityPlayerActivity
{
  public static final String EXTRA_BOOLEAN_UI = "show_ui";
  public static final String EXTRA_STRING_TXT = "default_text";
  public static final String EXTRA_INT_SYMBOLS = "symbols_mask";
  public static final String EXTRA_BOOLEAN_LANDSCAPE = "force_landscape";
   
  public void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);
  }
   
  public void launchScannerImpl(boolean showUI, String defaultText, int symbols, boolean forceLandscape)
  {
    Intent intent = new Intent(this, CameraActivity.class);
    intent.putExtra("show_ui", showUI);
    intent.putExtra("default_text", defaultText);
    intent.putExtra("symbols_mask", symbols);
    intent.putExtra("force_landscape", forceLandscape);
    startActivity(intent);
  }
   
  public static void launchScannerImpl(Activity root, boolean showUI, String defaultText, int symbols, boolean forceLandscape)
  {
    Intent intent = new Intent(root, CameraActivity.class);
    intent.putExtra("show_ui", showUI);
    intent.putExtra("default_text", defaultText);
    intent.putExtra("symbols_mask", symbols);
    intent.putExtra("force_landscape", forceLandscape);
    root.startActivity(intent);
  }
}
这个源码大家瞅瞅,最后我把整个工程的源码都贴上来了


源码链接如下:
http://www.arvrschool.com/read.php?tid=110&fid=60&page=1

最新喜欢:

shine2015shine2... dayelongshedayelo...
AR学院(www.arvrschool.com),从这里感触未来!

欢迎分享

Blank
论坛版主
论坛版主
  • UID51
  • 粉丝2
  • 关注1
  • 发帖数18
沙发#
发布于:2015-07-31 18:27
666
Blank
论坛版主
论坛版主
  • UID51
  • 粉丝2
  • 关注1
  • 发帖数18
板凳#
发布于:2015-07-31 18:27
6666
Blank
论坛版主
论坛版主
  • UID51
  • 粉丝2
  • 关注1
  • 发帖数18
地板#
发布于:2015-07-31 18:27
66666
Blank
论坛版主
论坛版主
  • UID51
  • 粉丝2
  • 关注1
  • 发帖数18
4楼#
发布于:2015-07-31 18:27
666666
Blank
论坛版主
论坛版主
  • UID51
  • 粉丝2
  • 关注1
  • 发帖数18
5楼#
发布于:2015-07-31 18:27
666666666666666666
Blank
论坛版主
论坛版主
  • UID51
  • 粉丝2
  • 关注1
  • 发帖数18
6楼#
发布于:2015-07-31 18:27
666666666666666666666666666666
Blank
论坛版主
论坛版主
  • UID51
  • 粉丝2
  • 关注1
  • 发帖数18
7楼#
发布于:2015-07-31 18:27
666666666666666666666666666666666666666666
Blank
论坛版主
论坛版主
  • UID51
  • 粉丝2
  • 关注1
  • 发帖数18
8楼#
发布于:2015-07-31 18:27
666666666666666666666666
Blank
论坛版主
论坛版主
  • UID51
  • 粉丝2
  • 关注1
  • 发帖数18
9楼#
发布于:2015-07-31 18:28
666666666666666666666666666666
Blank
论坛版主
论坛版主
  • UID51
  • 粉丝2
  • 关注1
  • 发帖数18
10楼#
发布于:2015-07-31 18:28
666666666666666666666666666666666666666666
Blank
论坛版主
论坛版主
  • UID51
  • 粉丝2
  • 关注1
  • 发帖数18
11楼#
发布于:2015-07-31 18:28
666666666666666666666666666666666666666666666666
Blank
论坛版主
论坛版主
  • UID51
  • 粉丝2
  • 关注1
  • 发帖数18
12楼#
发布于:2015-07-31 18:28
666666666666666666666666666666666666666666
lcc2015
骑士
骑士
  • UID66
  • 粉丝0
  • 关注0
  • 发帖数29
  • 社区居民
  • 忠实会员
13楼#
发布于:2015-08-28 11:39
好东西,下载个
kely
侠客
侠客
  • UID246
  • 粉丝0
  • 关注0
  • 发帖数20
14楼#
发布于:2015-11-07 00:06
66666
上一页
游客

返回顶部