• 感谢您的阅读。喜欢的、有用的就请大哥大嫂们高抬贵手“推荐一下”吧!你的精神支持是博主强大的写作动力以及转载收藏动力。欢迎转载!
  • 版权声明:本文原创发表于 【请点击连接前往】 ,未经作者同意必须保留此段声明!如有问题请联系我,侵立删,谢谢!
  • 我的博客:http://www.cnblogs.com/GJM6/  -  传送门:【点击前往

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/





今天这篇文章主要讲两块配置:AndroidUnity.

1.Android方面配置(我选用的是Eclipse

1)首先建立安卓工程,这里注意的是minimum
Required SDK应该选用4.0不然后面会报错。

2)复制百度地图SDK下的libs文件夹(注意这里两篇文章都说要导入Unity的Class.jar,其实是看需求的,我用了一个中间层来专门写接口,所以暂时不用UnityPlayerActivity这个类)复制进来后如下图:这里特别注意:把v8ax86_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和一些权限,还要注意将UnityActivity设置为主启动,雨松的博客以及他的衍生博客均是把继承了UnityPlayerActivityMainActivity设置为主启动,然后也不加UnityAcitivity直接就复制进UnityPlugins-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 [转载]的更多相关文章

  1. Mono For Android中完美使用百度地图SDK(v2.1.2&v2.1.3)(转)

    在Xamarin Mono For Android的开发中,如果要使用第三方的jar,就必须进行绑定.通过创建Java Bindings Library项目来自动生成C#到java的代码映射代码,最终 ...

  2. 百度地图SDK下载以及创建应用(申请Key)和本地导入Demo

    一.百度地图SDK下载 http://lbsyun.baidu.com/sdk/download?selected=location 选择全部,然后分别下载开发包.示例代码.类参考. 二.创建应用(申 ...

  3. Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直觉得地图应用支持离线地图很重要啊,我等移动2G屌丝,流量不易, ...

  4. Android 百度地图 SDK v3.0.0 (一)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37729091 最近公司要把百度地图集成的项目中,于是我就研究了一天百度地图的SD ...

  5. Android 百度地图 SDK v3.0.0 (四) 离线地图功能介绍

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直认为地图应用支持离线地图非常重要啊.我等移动2G屌丝,流量不易 ...

  6. iOS百度地图SDK集成详细步骤

    1.iOS百度地图下载地址 http://developer.baidu.com/map/index.php?title=iossdk/sdkiosdev-download 根据需要选择不同的版本  ...

  7. Android Studio集成百度地图SDK

    1.建议先阅读百度地图官方的继承指南,针对了Eclipse和Android Studio. 百度官方集成指南 2.下载百度地图SDK Android SDK v4.1.1 下载有两种: 1.一键下载( ...

  8. Android 百度地图 SDK v3.0.0 (三) 添加覆盖物Marker与InfoWindow的使用

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...

  9. Android 百度地图 SDK v3.0.0 (三) 加入覆盖Marker与InfoWindow使用

    转载请注明出处:http://blog.csdn.net/lmj623565791/article/details/37737213 上篇博客已经实现了地图的定位以及结合了方向传感器用户路痴定位方向, ...

随机推荐

  1. titit. 深入理解 内聚( Cohesion)原理and  attilax大总结

    atitit. 深入理解 内聚( Cohesion)原理and  attilax大总结         1.1. 内聚的概念 1 1.1.1. 高内聚模式关于这个问题给出的答案是:分配职责,使其可保持 ...

  2. 设计模式之里氏代换原则(LSP)

    里氏代换原则(Liskov Substitution Principle, LSP) 1 什么是里氏代换原则 里氏代换原则是由麻省理工学院(MIT)计算机科学实验室的Liskov女士,在1987年的O ...

  3. SSIS 数据类型和类型转换

    在进行ETL开发时,数据类型(Data Type)是最基础的,但也容易被忽略,楼主使用的SQL Server 版本是2012,用此博文记录,常用的SSIS数据类型和TSQL数据类型的映射.SSIS的数 ...

  4. 上传伪技术~很多人都以为判断了后缀,判断了ContentType,判断了头文件就真的安全了。是吗?

    今天群里有人聊图片上传,简单说下自己的经验(大牛勿喷) 0.如果你的方法里面是有指定路径的,记得一定要过滤../,比如你把 aa文件夹设置了权限,一些类似于exe,asp,php之类的文件不能执行,那 ...

  5. SQL联合主键 查重

    2014年最后一天,今天在给数据库导入数据的时候,遇到一个问题,就是联合主键去重. 事情是这样的,现有一个表M,我想找个表中导入了许多数据,并需要将字段A(int)和B(int)联合设置为主键. 但是 ...

  6. 【转】Linux C动态内存泄漏追踪方法

    原文:http://www.cnblogs.com/san-fu-su/p/5737984.html C里面没有垃圾回收机制,有时候你申请了动态内存却忘记释放,这就尴尬了(你的程序扮演了强盗角色,有借 ...

  7. lintcode Permutation Index

    题目:http://www.lintcode.com/zh-cn/problem/permutation-index/ 排列序号 给出一个不含重复数字的排列,求这些数字的所有排列按字典序排序后该排列的 ...

  8. 一起学微软Power BI系列-官方文档-入门指南(6)Power BI与Excel

    今天介绍了官方入门文档中有关PowerBI和Excel的知识.前几篇入门文档有点仓促,加上最近时间的研究,会有更多技巧性和入门型的文章或者视频发布,最后2篇入门文档将更加详细一点,因为部分文章进行简单 ...

  9. spring源码分析之定时任务Scheduled注解

    1. @Scheduled 可以将一个方法标识为可定时执行的.但必须指明cron(),fixedDelay(),或者fixedRate()属性. 注解的方法必须是无输入参数并返回空类型void的. @ ...

  10. 让你的JS更优雅的小技巧

    首先,看一个非常不优雅的例子: 看到这段代码,虽然代码很短,但是一眼看上去就不想再看了,也就是没什么可读性.这段代码,没有封装,随意定义一个变量都是全局变量,这样在多人开发或者是大型开发中,极其容易造 ...