GJM:Unity导入百度地图SDK [转载]
Unity导入百度地图SDK
本来以为很简单的接入SDK,断断续续弄了好久,基本看遍了国内外大大小小的网站,国内比较出名的两篇教程:第一个是雨松的:http://www.xuanyusong.com/archives/667
第二个是这篇博客:http://stephen830.iteye.com/blog/2088504
参考上述两篇,其中流程和做法基本都是正确的,只是原理和细节还是没有说清楚,导致很多人接入SDK时纸质其然而不知其所以然,所以我还是把我这一个星期踩过的坑都记录下来,希望下次遇到同样的问题有个参考。
这篇文章最后实现的功能:打开应用后首先出现的场景,点击场景中的一个Button按钮后弹出百度地图界面。
Eclipse环境搭建等见上一篇文章:
使用Eclipse导入SDK遇到的问题总结:http://anchorart9.com/2016/10/23/androidsdksubmit/
今天这篇文章主要讲两块配置:Android和Unity.
1.Android方面配置(我选用的是Eclipse)
1)首先建立安卓工程,这里注意的是minimum
Required SDK应该选用4.0不然后面会报错。
2)复制百度地图SDK下的libs文件夹(注意这里两篇文章都说要导入Unity的Class.jar,其实是看需求的,我用了一个中间层来专门写接口,所以暂时不用UnityPlayerActivity这个类)复制进来后如下图:这里特别注意:把v8a和x86_64两个文件夹删掉,不然到Unity里会报错,三个文件夹名字分别代表不同手机的CPU类型,x86_64是代表64的平板。
3)写两个类,一个中间层类【MainActivity】用来写接口调用百度地图的Activity,一个是百度地图的类继承Activity,因为这个是百度地图的界面类,遵循Activity的生命周期,要在onCreat钩子方法中初始化百度地图界面。[mw_shl_code=java,true]package
com.baidulbs.lbssdk;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.util.Log;
import android.widget.Toast;
public class MainActivity {
private static Context unityContext;
private static Activity unityActivity;
//init方法,用来传入上下文
public static void init(Context paramContext){
unityContext = paramContext.getApplicationContext();
unityActivity = (Activity) paramContext;
}
public static void StartActivity0() {
// TODO Auto-generated method stub
unityActivity.runOnUiThread(new Runnable()
{
public void run()
{
try{
Log.i("startA", "startActivity0");
Intent intent = new Intent(unityActivity,BaiduMap.class);
unityActivity.startActivity(intent);
}
catch (Exception e) {
e.printStackTrace();
}
}
});
}
}
[/mw_shl_code]
[mw_shl_code=java,true]package com.baidulbs.lbssdk;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.MapView;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class BaiduMap extends Activity {
MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("BaiduActivityTest", "进入了");
SDKInitializer.initialize(getApplicationContext());
Log.i("BaiduActivityTest", "初始化完成");
setContentView(R.layout.activity_main);
Log.i("BaiduActivityTest", "设置面板完成");
mMapView = (MapView) findViewById(R.id.bmapView);
Log.i("BaiduActivityTest", "初始化地图完成");
}
}[/mw_shl_code]
注意写几个Log方便查看Logcat,之前一直用ADB查看日志发现很多log不详细,比如window弹不出来它就只报WindowChangeFales.
4)配置AndroidManifest.xml,这里注意:改成你的包名,并添加BaiduMap这个Activity,还有你自己的Key和一些权限,还要注意将Unity的Activity设置为主启动,雨松的博客以及他的衍生博客均是把继承了UnityPlayerActivity的MainActivity设置为主启动,然后也不加Unity的Acitivity直接就复制进Unity中Plugins-Android目录了,这样导致的后果就是先启动Android界面了。我这里之所以没有加入MainActivity是因为他只不过充当一个中间层,也没有继承Activity,只有BaiduMap这个类是继承Activity的。这里不要只抄雨松他们的博客,要知道你自己的需求和原理,他们也都是提供参考和引导。
[mw_shl_code=applescript,true]<?xml version="1.0"
encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.baidulbs.lbssdk"
android:versi"1"
android:versi"1.0" >
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="25" />
<uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission
android:name="android.permission.INTERNET"/>
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"
/>
<uses-permission
android:name="android.permission.WAKE_LOCK"/>
<uses-permission
android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"
/>
<uses-permission
android:name="android.permission.GET_TASKS" />
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission
android:name="android.permission.WRITE_SETTINGS" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="你的Key"
/>
<activity
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:name="com.baidulbs.lbssdk.BaiduMap">
</activity>
<activity
android:name="com.unity3d.player.UnityPlayerActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"
/>
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="unityplayer.ForwardNativeEventsToDalvik"
android:value="true" />
</activity>
</application>
</manifest>[/mw_shl_code]
5)导处jar包,直接右键项目-Export-Next,直选中scr文件夹,然后导出就行了,好多博客在这里讲的都很乱。
至此Android这块的配置全部结束。
2.Unity方面配置
1)将Android工程中的libs+res+AndroidManifest+百度地图Demo中的assets(有朋友开发到后面因为每加这个包出错)都复制到Unity目录下,建立bin文件夹,将打包好的.jar文件复制到bin文件夹下:
2)在Unity中编辑测试代码:
[mw_shl_code=csharp,true]using UnityEngine;
using UnityEngine.UI;
using System.Collections;
public class Test : MonoBehaviour {
// Update is called once per frame
public Button btnStartLBS;
public Button btnStartLBSMap;
AndroidJavaClass unityPlayer;
AndroidJavaObject currentActivity;
AndroidJavaClass androidCall;
void Start()
{
//获取context
unityPlayer = new
AndroidJavaClass("com.unity3d.player.UnityPlayer");
currentActivity =
unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
androidCall = new
AndroidJavaClass("com.baidulbs.lbssdk.MainActivity");
androidCall.CallStatic("init", currentActivity);
btnStartLBS.onClick.AddListener(BtnStartLBSOnClick);
btnStartLBSMap.onClick.AddListener(BtnStartLBSMapOnClick);
}
void Update ()
{
//当用户按下手机的返回键或home键退出游戏
if (Input.GetKeyDown(KeyCode.Escape) ||
Input.GetKeyDown(KeyCode.Home) )
{
Application.Quit();
}
}
void BtnStartLBSMapOnClick()
{
androidCall.CallStatic("StartActivity0");
Debug.Log("2");
}
}[/mw_shl_code]
3)发布这里要把包名与你Android项目中包名一致。
4)勾上Development
Build然后Build and
Run.这时你需要连上真机进行测试在Eclipse中打开Logcat就可以查看Log日志了,要查看自己设置的Log可以在左边添加Filter,在里面添加自己的Tag,例如我之前卡在初始化这里,也可以在AndroidSDK-platform-tools目录下使用命令:adb logcat -s Unity进行调试(这种方法显示信息不全建议还是用Eclipse调试)。
5)最终效果:点击按钮后跳转到百度地图界面。
原文链接:http://anchorart9.com/2016/11/13/unity%E6%8E%A5%E5%85%A5%E7%99%BE%E5%BA%A6%E5%9C%B0%E5%9B%BEsdk/
GJM:Unity导入百度地图SDK [转载]的更多相关文章
- Mono For Android中完美使用百度地图SDK(v2.1.2&v2.1.3)(转)
在Xamarin Mono For Android的开发中,如果要使用第三方的jar,就必须进行绑定.通过创建Java Bindings Library项目来自动生成C#到java的代码映射代码,最终 ...
- 百度地图SDK下载以及创建应用(申请Key)和本地导入Demo
一.百度地图SDK下载 http://lbsyun.baidu.com/sdk/download?selected=location 选择全部,然后分别下载开发包.示例代码.类参考. 二.创建应用(申 ...
- Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直觉得地图应用支持离线地图很重要啊,我等移动2G屌丝,流量不易, ...
- Android 百度地图 SDK v3.0.0 (一)
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37729091 最近公司要把百度地图集成的项目中,于是我就研究了一天百度地图的SD ...
- Android 百度地图 SDK v3.0.0 (四) 离线地图功能介绍
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直认为地图应用支持离线地图非常重要啊.我等移动2G屌丝,流量不易 ...
- iOS百度地图SDK集成详细步骤
1.iOS百度地图下载地址 http://developer.baidu.com/map/index.php?title=iossdk/sdkiosdev-download 根据需要选择不同的版本 ...
- Android Studio集成百度地图SDK
1.建议先阅读百度地图官方的继承指南,针对了Eclipse和Android Studio. 百度官方集成指南 2.下载百度地图SDK Android SDK v4.1.1 下载有两种: 1.一键下载( ...
- Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...
- Android 百度地图 SDK v3.0.0 (三) 加入覆盖Marker与InfoWindow使用
转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...
随机推荐
- padding标准盒模型和怪异盒子模型
我们都知道padding是为块级元素设置内边距 但是在使用过程中,我们却会遇到一些问题.padding的标准盒模型和怪异盒模型 padding盒子模型 我们通过demo来讲这个问题,用文字干讲第一没意 ...
- 【原】通过JS打开IE新tab(非Window)的解决方案
近日项目里遇到限定在IE的tab窗口里打开新窗口的需求,结合网上的资源和亲自实践,总结以下比较可行的解决方案. 1.首先必须保证IE的设置正确.打开IE的Internet options ->G ...
- Sql Server系列:字符串函数
字符串函数用于对字符和二进制字符串进行各种操作,大多数字符串函数只能作用于char.nchar.varchar和nvarchar数据类型.字符串函数可以用在SELECT或者WHERE语句中. 1. A ...
- 【Win 10 应用开发】RTM版的UAP项目解剖
Windows 10 发布后,其实SDK也偷偷地在VS的自定义安装列表中出现了,今天开发人员中心也更新了下载.正式版的SDK在API结构上和以前预览的时候是一样的,只是版本变成10240罢了,所以大家 ...
- Python标准模块--functools
1 模块简介 functools,用于高阶函数:指那些作用于函数或者返回其它函数的函数,通常只要是可以被当做函数调用的对象就是这个模块的目标. 在Python 2.7 中具备如下方法, cmp_to_ ...
- JavaScript之糟粕
0.导言 在上篇<JavaScript之毒瘤>中,列举了一些在JavaScript中难以避免的问题特性.本篇将会展示JavaScript中有问题的特性,但我们很容易就能便面它们.通过这些简 ...
- 引用类型-Object类型
创建Object实例的方式有两种. 第一种是使用new操作符后跟Object构造函数 var person = new Object(); person.name = "liao" ...
- react+redux教程(二)redux的单一状态树完全替代了react的状态机?
上篇react+redux教程,我们讲解了官方计数器的代码实现,react+redux教程(一).我们发现我们没有用到react组件本身的state,而是通过props来导入数据和操作的. 我们知道r ...
- 小菜学习Winform(五)窗体间传递数据
前言 做项目的时候,winfrom因为没有B/S的缓存机制,窗体间传递数据没有B/S页面传递数据那么方便,今天我们就说下winfrom中窗体传值的几种方式. 共有字段传递 共有字段传递实现起来很方便, ...
- MVC, MVP, MVVM比较以及区别(下)
上一篇得到大家的关注,非常感谢.一些朋友评论中,希望快点出下一篇.由于自己对于这些模式的理解也是有限,所以这一篇来得迟了一些.对于这些模式的比较,是结合自己的理解,一些地方不一定准确,但是只有亮出自己 ...