一、基础篇:unity简单集成百度地图(基础地图),做记录,抗遗忘。(利用Android studio为unity编写百度地图插件)

来源:互联网 发布:淘宝退货率多少算正常 编辑:程序博客网 时间:2024/06/05 14:06

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项目的包名和安卓项目的包名一致,然后打包,上真机运行,不出意外的话,能成功。

原创粉丝点击