第21行: | 第21行: | ||
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--> | <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--> | ||
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> | <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> | ||
− | |||
− | |||
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--> | <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--> | ||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> | <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> |
2019年7月23日 (二) 20:48的版本
开发工具
Android开发工具有很多,开发者可根据自己的喜好进行选择。在此,我们推荐开发者使用Android studio作为自己的开发工具,本套开发指南也是针对Android studio开发环境下进行编写的。
工程配置
1第一步
在工程里新建libs文件夹,将开发包里的component_common_sdk.jar拷贝到libs根目录下,SDK中用到了android-support-v4.jar、gson.jar、org.apache.http.legacy.jar中的相关方法,如果您的工程中没有这三个jar包,请自行引入。
2第二步
a)开发者调用Android AR识别SDK功能时,由于Android AR识别SDK强依赖定位信息,所以开发者需要一起接入地图定位SDK传递经纬度信息(可按Demo传递经纬度)。
b)若开发者要在Android AR识别SDK中实现探索周边功能,需要集成地图SDK检索功能, 如果不需要发现周边功能,可不集成地图SDK检索功能(根据自身需要选择是否集成)。
b)若开发者要在Android AR识别SDK中实现探索周边功能,需要集成地图SDK检索功能, 如果不需要发现周边功能,可不集成地图SDK检索功能(根据自身需要选择是否集成)。
3第三步
开发者若使用proguard混淆项目工程, 需要在混淆配置文件中添加如下代码:
-dontwarn map.baidu.** -keep class map.baidu.**{*;}
调用Android AR识别SDK
百度地图Android AR识别SDK为开发者提供了便捷的功能调用接口,通过以下几步操作,即可在您的应用中使用Android AR识别SDK提供的数据
1第一步
创建并配置工程(具体方法参见工程配置部分的介绍);
2第二步
在Manifest中添加使用权限、Android版本支持和对应的开发密钥;
常用使用权限如下(开发者可根据自身程序需求,添加所需权限):
常用使用权限如下(开发者可根据自身程序需求,添加所需权限):
<!--访问相机权限--> <uses-permission android:name="android.permission.CAMERA"/> <!--访问闪光灯--> <uses-permission android:name="android.permission.FLASHLIGHT"/> <!-- 这个权限用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <!-- 这个权限用于访问GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <!-- 获取运营商信息,用于支持提供运营商信息相关的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <!-- 访问网络,网络定位需要上网--> <uses-permission android:name="android.permission.INTERNET"/>
3第三步
配置Activity
// 主Activity <activity android:name="sdk.cammer.common.baidu.map.mapcam.MainActivity" android:configChanges="orientation" android:screenOrientation="portrait"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> // Ar默认Activity <activity android:name="sdk.cammer.common.baidu.map.mapcam.ArActivity" android:screenOrientation="portrait"> </activity> // 景区Activity <activity android:name="sdk.cammer.common.baidu.map.mapcam.SceneryArActivity" android:screenOrientation="portrait"> </activity> // 识楼Activity <activity android:name="sdk.cammer.common.baidu.map.mapcam.BuildingArActivity" android:screenOrientation="portrait"> </activity>
4第四步
添加屏幕及版本支持
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:smallScreens="true"/>
5第五步
添加对应的开发密钥
开发者可在百度地图开放平台申请开发密钥,填写到om.baidu.lbsapi.API_KEY 的value位置。
开发者可在百度地图开放平台申请开发密钥,填写到om.baidu.lbsapi.API_KEY 的value位置。
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="开发密钥"> </meta-data>
6第六步
在布局xml文件中添加Poi控件,布局文件保存为.xml
<map.baidu.ar.camera.POIItem xmlns:android=http://schemas.android.com/apk/res/android android:layout_width="wrap_content" android:layout_height="wrap_content"/>
7第七步
创建Android AR识别SDK默认的ArActivity用于自定义单目标点展示、自定义多目标点展示和拓展发现周边展示。
a、导入相关类:
a、导入相关类:
import android.os.Bundle; import android.support.v4.app.FragmentActivity; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.RelativeLayout; import android.widget.Toast; import map.baidu.ar.ArPageListener; import map.baidu.ar.camera.SimpleSensor; import map.baidu.ar.camera.find.FindArCamGLView; import map.baidu.ar.model.PoiInfoImpl; import map.baidu.ar.utils.TypeUtils;b、在onCreate方法中添加相机视图
camRl = (RelativeLayout) findViewById(R.id.cam_rl); mCamGLView = (FindArCamGLView)LayoutInflater.from(this).inflate(R.layout.layout_find_cam_view, null); camRl.addView(mCamGLView);在onCreate方法中初始化传感器
private void initSensor() { if (mSensor == null) { mSensor = new SimpleSensor(this, new HoldPositionListenerImp()); } mSensor.startSensor(); }
c、设置传感器监听
private class HoldPositionListenerImp implements SimpleSensor.OnHoldPositionListener { @Override public void onOrientationWithRemap(float[] remapValue) { if (mCamGLView != null && mArPoiItemRl != null) { if (poiInfos.size() <= 0) { mArPoiItemRl.setVisibility(View.GONE); Toast.makeText(ArActivity.this, "附近没有可识别的类别", Toast.LENGTH_LONG).show(); } else { mCamGLView.setFindArSensorState(remapValue, getLayoutInflater(), mArPoiItemRl, ArActivity.this, poiInfos, ArActivity.this); mArPoiItemRl.setVisibility(View.VISIBLE); } } } }
d、在onDestory()方法中释放资源
private void finishCamInternal() { if (mCamGLView != null) { mCamGLView.stopCam(); camRl.removeAllViews(); mCamGLView = null; } if (mArPoiItemRl != null) { mArPoiItemRl.removeAllViews(); } if (mSensor != null) { mSensor.stopSensor(); } }
8第八步
景区SceneryArActivity\识楼BuildingArActivity配置
景区SceneryArActivity和识楼BuildingArActivity配置可以参考第七条Android AR识别SDK默认的ArActivity的配置过程(或者参考demo中的实现方案),此处不重复列举。
景区SceneryArActivity和识楼BuildingArActivity配置可以参考第七条Android AR识别SDK默认的ArActivity的配置过程(或者参考demo中的实现方案),此处不重复列举。
9第九步
配置Application
a、Android AR识别SDK模块初始化并设置MyGeneralListener监听
a、Android AR识别SDK模块初始化并设置MyGeneralListener监听
ArSdkManager.getInstance().initApplication(this, new MyGeneralListener());b、设置MyGeneralListener监听,用于监听鉴定权限返回信息以及获取经纬度信息。
static class MyGeneralListener implements MKGeneralListener { // 1、事件监听,用来处理通常的网络错误,授权验证错误等 public void onGetPermissionState(int iError) {} // 2、回调给Android AR识别SDK获取坐标(demo调用百度定位SDK) public ArBDLocation onGetBDLocation() { // 3、用于传递给Android AR识别SDK经纬度信息 // a、首先通过百度地图定位SDK获取经纬度信息 // b、包装经纬度信息到地图ArSdk的ArBDLocation类中 return即可 BDLocation location = LocSdkClient.getInstance(ArSdkManager.getInstance().getAppContext()).getLocationStart() .getLastKnownLocation(); if (location == null) {return null;} ArBDLocation arBDLocation = new ArBDLocation(); // 设置经纬度信息 arBDLocation.setLongitude(location.getLongitude()); arBDLocation.setLatitude(location.getLatitude()); return arBDLocation;}}
10第十步
展示效果
最后完成以上步骤后,运行程序,即可在您的应用中显示如下: