您的位置:首页 > 移动开发 > Unity3D

一、基础篇: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项目的包名和安卓项目的包名一致,然后打包,上真机运行,不出意外的话,能成功。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: