【分享】鸡血二连发~Android-怎样写一个基本的Vuforia应用

huangpu_one 2014-07-25 11:46:28
楼主再来分享一下,以下内容是初学者如何创建uforia-enabled Android应用程序~~~~~

这篇文章提供了一个简单的指导性说明:怎样从一个空的Activity创建一个Vuforia-enabled Android应用程序。这里将只涵盖最基本的设置步骤,比如Vuforia初始化、Tracker初始化以及启动和停止摄像头。如果需要进一步了解这些功能,您可以参考开发人员指导文档,并查看Vuforia示例中的示例代码。
文章会使用到Android生命周期的基本概念和API,比如创建(creating).暂停(pausing).恢复(resuming) 以及 销毁(destroying)
更多关于Android开发和Android Activity 生命周期的信息请参阅官方Android开发文档
https://developer.android.com/guide/index.html
http://developer.android.com/training/basics/activity-lifecycle/index.html

创建 Vuforia dependencies
为了使用Android Vuforia SDK(Java API),你需要添加下面的库
- libVuforia.sa: 这是一个Vuforia为Android提供的原生库;你可以在Vuforia安装目录下找到这个库(在 'vuforia-sdk / build / lib / armeabi-v7a /')将他拷贝到你的工程目录,放到'/ libs / armeabi-v7a /' 下
- Vuforia.jar: 这个库包含Vuforia Java API,你可以在vuforia-sdk / build / Java / vuforia /下找到他。你可以把这个库加入到工程的依赖项里去,在Eclipse中,可以使用 Project ( 项目)> Properties(属性) > Java Build Path(java构建路径) > Libraries(库) 来添加
更多关于如何设置Vuforia的信息,请参考Getting Started Guide:
https://developer.vuforia.com/resources/dev-guide/getting-started-android-native-sdk

设置AndroidManifest
确保在AndroidManifest.Xml文件中,添加必要的Android权限
[size=16px]android.permission.ACCESS_NETWORK_STATE
android.permission.ACCESS_WIFI_STATE
android.permission.CAMERA
android.permission.INTERNET

另见:
https://developer.vuforia.com/resources/dev-guide/android-permissions

Vuforia 初始化
当你的Activity被创建时,onCreate()方法会被调用;你可以在这个方法里,放入多数关于应用程序初始化的代码;同时,这里也是你放入Vuforia初始化代码的地方,Vuforia初始化使用方法Vuforia.Init(),代码如下:
Vuforia.setInitParameters( myActivity, Vuforia.GL_20 );
do
{
mProgressValue = Vuforia.init();
}
while (mProgressValue >= 0 && mProgressValue < 100);

由于初始化Vuforia比较耗时,我们推荐将初始化代码放入AsyncTask(异步任务)中异步执行。Vuforia实例给出了正确的实现。

初始化Trackers
一旦Vuforia初始化完成。紧接着下一步需要完成的就是跟踪器(Trackers) 的初始化;注意你可能根据应用程序功能的不同使用不同的跟踪器(Trackers):ImageTracker或者MarkerTracker又或者TextTracker。你也可以同时初始化多个Tracker(比如同时初始化ImageTracker和MarkerTracker,如果你想同时使用Image Targets和Frame Markers),下面的代码段展示了怎样初始化ImageTracker:
ava]TrackerManager tManager = TrackerManager.getInstance();
Tracker tracker = tManager.initTracker(ImageTracker.getClassType());

跟踪器(Trackers)数据加载
当Trackers正确初始化之后(但还没有启动之前),下一步就是要加载一些数据;比如如果你的应用需要Image Targets,你也许希望加载一个或者多个数据集。需要再次说明的是:由于数据加载需要消耗一定的时间(依赖于你加载的数据量的大小)。你应该考虑使用异步任务(AsyncTask)来完成这个任务,Vuforia示例中给出了不错的实现例子。
设置OpenGL视图,启动摄像头
完成数据加载后,下一个阶段一般是初始化并启动摄像头;但是在启动摄像头之前,你需要创建一个OpenGL视图并把它添加到你的Activity,就像下面的代码给出的一样。
int depthSize = 16;
int stencilSize = 0;
boolean translucent = Vuforia.requiresAlpha();

mGlView = new SampleGLView(this);
mGlView.init(translucent, depthSize, stencilSize);

mRenderer = new ImageTargetRenderer();
mGlView.setRenderer(mRenderer);

addContentView(mGlView, new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT));

你可以参考Vuforia示例更进一步的了解OpenGL视图的实现以及其他相关的呈示器(renderer)一旦OpenGL 视图设置完成。就可以启动摄像头,进而视频背景就能够被配置。
CameraDevice.getInstance().init(camera);

configureVideoBackground();

CameraDevice.getInstance().selectVideoMode(
CameraDevice.MODE.MODE_DEFAULT))

CameraDevice.getInstance().start());

Vuforia.setFrameFormat(PIXEL_FORMAT.RGB565, true);

// Start the tracker
TrackerManager tman = TrackerManager.getInstance();
Tracker tracker = tman.getTracker(ImageTracker.getClassType());
tracker.start();

注意:如果摄像头没有启动,Tracker将无法启动;同样,摄像头在启动前也需要先初始化。总的来说,应该保证下面的调用顺序:
1. Tracker init
2. Camera init
3. Camera start
4. Tracker start
相类似的,在反初始化和停止时,需要采用下面的顺序。
1. Tracker stop
2. Camera stop
3. Camera deinit
4. Tracker deinit
同样,摄像头在OpenGL启动并关联到Activity之前,之前无法正常启动。相关代码在上面的代码段中有所展示。

暂停和恢复Activity
当Activity暂停时,onPause()方法将被调用;在这个方法中,你应该加入一些停止camera的代码。暂停Vuforia和OpenGL视图的方法如下:
@Override
protected void onPause()
{
super.onPause();

stopTrackers();
stopCamera();

if (mGlView != null)
{
mGlView.setVisibility(View.INVISIBLE);
mGlView.onPause();
}

Vuforia.onPause();
}

在上面的代码中,请特别注意对Vuforia.onPause()方法的调用。

Activity销毁
当你的activity被终止。onDestory()方法会被调用,在这里你应该放入一些代码执行反初始化和终止的工作,包括反初始化Vuforia,停止摄像头,停止trackers,反初始化trackers,释放所有数据,具体代码如下:
@Override
protected void onDestroy()
{
super.onDestroy();

stopTracker();
stopCamera();

deinitTracker();

Vuforia.deinit();
}
<span style="font-family: Arial, Verdana, sans-serif;">
</span>


在上述代码中,请特别注意对Vuforia.deinit ().的调用。
请参考Vuforia示例以了解详细的实现方法。

另参见:https://developer.vuforia.com/resources/dev-guide/native-sdk

...全文
3527 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
归海一啸 2014-10-27
  • 打赏
  • 举报
回复
http://blog.csdn.net/ggtaas
hw198891 2014-10-27
  • 打赏
  • 举报
回复
不错。楼主能否提供一下 vuforia android 其他的资料。或者网站帖子推荐。。。。 顶。。。。。
zhangerzhanger 2014-08-03
  • 打赏
  • 举报
回复
hao好 好药楼阁呀
Amanda_zhang 2014-07-25
  • 打赏
  • 举报
回复

948

社区成员

发帖
与我相关
我的任务
社区描述
为开发者提供高通丰富的解决方案及全面技术下载内容。本版以AI人工智能、WoS移动笔记本、XR、IoT 物联网、Auto 汽车、生成式AI等核心板块组成,为开发者提供一个便捷及高效的学习交流平台。
人工智能物联网机器学习 企业社区 北京·东城区
社区管理员
  • Qualcomm开发
  • csdnsqst0050
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧