一、基础篇:unity简单集成百度地图(基础地图),做记录,抗遗忘。(利用Android studio为unity编写百度地图插件)
2017-07-07 16:01
585 查看
1.下载百度地图样例地址:http://lbsyun.baidu.com/index.php?title=androidsdk
2.然后解压到如图,获取libs里边儿的jar和.so文件,拷贝出来备用
3.然后到as中开始,记录需要注意的地方:如图是需要拷贝进来的各种包,其中classes.jar是unity中搞出来的安卓unity交互的必备jar包
4.as中的代码很少,测试用的就两个类:MainActivity、OpenActivity1, 一个布局文件activity_main,直接上代码
MainActivity
package com.zcst.testactivity2;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import com.unity3d.player.UnityPlayerActivity;
public class MainActivity extends UnityPlayerActivity {
Activity mActivity=null;
Context mContext = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity=this;
mContext = this;
StartActivity1("我是通过安卓中显示的Activity");
}
public void StartActivity1(String name) {
// TODO Auto-generated method stub
Intent intent = new Intent(mContext,OpenActivity1.class);
intent.putExtra("name", name);
mActivity.startActivity(intent);
}
}
OpenActivity1
package com.zcst.testactivity2;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.MapView;
public class OpenActivity1 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.id_bmapView);
Log.i("BaiduActivityTest", "初始化地图完成");
}
@Override
protected void onDestroy()
{
super.onDestroy();
// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
mMapView = null;
}
@Override
protected void onResume()
{
super.onResume();
// 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause()
{
super.onPause();
// 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
}
activtiy_main
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.zcst.testactivity2.MainActivity">
<com.baidu.mapapi.map.MapView
android:id="@+id/id_bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
</RelativeLayout>
5.感觉这写的只有我能看懂啊,继续粘贴代码吧,要写不下去了!manifest中的权限,还有类的声明,
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<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.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@android:style/Theme.NoTitleBar">
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="百度地图的申请的key" />
<activity android:name="com.zcst.testactivity2.MainActivity">
<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" />
</activity>
<activity android:name="com.zcst.testactivity2.OpenActivity1"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>
</application>
这之前已经将v7包给删除了,导入的v4包(大家都用的v4包,不知道什么原因,as删除v7包会报错,到相应的错误地方修改)
6.下边儿是修改build.gradle,修改成library模式,删除包名,添加框框内的代码
7.找到app_debug.aar 文件,复制出来,然后解压会得到相应的unity需要的资源
如图先将libs中的classes.jar删除,将外部的classes.jar放进libs,接着进入到jni目录
将黄色框中的三个文件夹也拷贝到libs中
8.然后unity新建项目,建文件夹如图,将上边准备好的libs、res 、AndroidManifest.xml直接拖到Android文件夹下边
最后注意如图有一个assets文件,这个文件不找到的话,项目会闪退,最前边的时候准备过几个百度地图的jar包,这时候回到前边去找到其中一个名字为baidumaapi_map_v4_XX_XX.jar(也就是as里用的那个,不要用刚刚拷贝到unity中的那个),然后将后缀改为.rar,然后解压,里边儿有个assets文件夹没直接拷贝到unity文件夹的Android下边。
然后,是c#代码,用来和安卓代码交互用的,挂载到相机上。编写名字为js001的C#文件,内容:
using UnityEngine;
using System.Collections;
public class js001 : MonoBehaviour {
private AndroidJavaObject m_activity;
// Use this for initialization
void Start () {
AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
m_activity = jc.GetStatic<AndroidJavaObject> ("currentActivity");
}
void OnGUI(){
//call hello world
if(GUI.Button(new Rect(50,50,200,40),"Open Activity")){
m_activity.Call("StartActivity1","Unity中调出android的方法了");
}
//quit
if(Input.GetKey(KeyCode.Escape)||Input.GetKey(KeyCode.Home)){
Application.Quit();
}
}
// Update is called once per frame
void Update () {
}
}
最后修改unity项目的包名和安卓项目的包名一致,然后打包,上真机运行,不出意外的话,能成功。
2.然后解压到如图,获取libs里边儿的jar和.so文件,拷贝出来备用
3.然后到as中开始,记录需要注意的地方:如图是需要拷贝进来的各种包,其中classes.jar是unity中搞出来的安卓unity交互的必备jar包
4.as中的代码很少,测试用的就两个类:MainActivity、OpenActivity1, 一个布局文件activity_main,直接上代码
MainActivity
package com.zcst.testactivity2;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import com.unity3d.player.UnityPlayerActivity;
public class MainActivity extends UnityPlayerActivity {
Activity mActivity=null;
Context mContext = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity=this;
mContext = this;
StartActivity1("我是通过安卓中显示的Activity");
}
public void StartActivity1(String name) {
// TODO Auto-generated method stub
Intent intent = new Intent(mContext,OpenActivity1.class);
intent.putExtra("name", name);
mActivity.startActivity(intent);
}
}
OpenActivity1
package com.zcst.testactivity2;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.MapView;
public class OpenActivity1 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.id_bmapView);
Log.i("BaiduActivityTest", "初始化地图完成");
}
@Override
protected void onDestroy()
{
super.onDestroy();
// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
mMapView = null;
}
@Override
protected void onResume()
{
super.onResume();
// 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
mMapView.onResume();
}
@Override
protected void onPause()
{
super.onPause();
// 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
mMapView.onPause();
}
}
activtiy_main
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.zcst.testactivity2.MainActivity">
<com.baidu.mapapi.map.MapView
android:id="@+id/id_bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
</RelativeLayout>
5.感觉这写的只有我能看懂啊,继续粘贴代码吧,要写不下去了!manifest中的权限,还有类的声明,
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<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.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@android:style/Theme.NoTitleBar">
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="百度地图的申请的key" />
<activity android:name="com.zcst.testactivity2.MainActivity">
<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" />
</activity>
<activity android:name="com.zcst.testactivity2.OpenActivity1"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"/>
</application>
这之前已经将v7包给删除了,导入的v4包(大家都用的v4包,不知道什么原因,as删除v7包会报错,到相应的错误地方修改)
6.下边儿是修改build.gradle,修改成library模式,删除包名,添加框框内的代码
7.找到app_debug.aar 文件,复制出来,然后解压会得到相应的unity需要的资源
如图先将libs中的classes.jar删除,将外部的classes.jar放进libs,接着进入到jni目录
将黄色框中的三个文件夹也拷贝到libs中
8.然后unity新建项目,建文件夹如图,将上边准备好的libs、res 、AndroidManifest.xml直接拖到Android文件夹下边
最后注意如图有一个assets文件,这个文件不找到的话,项目会闪退,最前边的时候准备过几个百度地图的jar包,这时候回到前边去找到其中一个名字为baidumaapi_map_v4_XX_XX.jar(也就是as里用的那个,不要用刚刚拷贝到unity中的那个),然后将后缀改为.rar,然后解压,里边儿有个assets文件夹没直接拷贝到unity文件夹的Android下边。
然后,是c#代码,用来和安卓代码交互用的,挂载到相机上。编写名字为js001的C#文件,内容:
using UnityEngine;
using System.Collections;
public class js001 : MonoBehaviour {
private AndroidJavaObject m_activity;
// Use this for initialization
void Start () {
AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
m_activity = jc.GetStatic<AndroidJavaObject> ("currentActivity");
}
void OnGUI(){
//call hello world
if(GUI.Button(new Rect(50,50,200,40),"Open Activity")){
m_activity.Call("StartActivity1","Unity中调出android的方法了");
}
//quit
if(Input.GetKey(KeyCode.Escape)||Input.GetKey(KeyCode.Home)){
Application.Quit();
}
}
// Update is called once per frame
void Update () {
}
}
最后修改unity项目的包名和安卓项目的包名一致,然后打包,上真机运行,不出意外的话,能成功。
相关文章推荐
- unity语言本地化插件 I2 Location2.5.6使用简单记录
- 【unity】插件编写之简单的电影模式框架
- Unity学习日常问题记录七--尝试编写部分自己简单的碰撞规则一
- 利用python基础编写简单的日历
- 利用jQuery编写一个简单的插件
- Android studio 百度地图开发(8)地图已标记POI点和搜索POI点的获取和利用
- Unity 小地图制作插件NJG MiniMap的简单使用
- xmpp with openfire 之五 插件之一 利用Broadcast 插件实现简单群
- xmpp with openfire 之五 插件之一 利用Broadcast 插件实现简单群
- 简单利用 log4net 向文件中写入日志记录
- 利用socket编写简单的web 服务器
- ATL入门:利用ATL编写简单的COM组件
- 利用 google map 写的地图,简单的用了一些功能
- (转)jquery傻瓜基础教程之教你如何制作简单的dialog插件
- 利用 Debug API 编写一个简单的脱壳机
- 利用Java编写简单的WebService实例
- 一个显示地图数据,并实现简单浏览查询程序源码(SDK编写)
- 利用C#编写一个简单的抓网页应用程序
- Eclipse插件开发之添加简单的GUI元素-Java基础-Java-编程开发
- 利用PropEdit插件编写properties文件