unity3d调用Android的java代码实现地图的连接

1  打开eclipse 点击window 点击preference,点击Android 设置SDK的位置
2  导入安卓工程(从unity导出来的工程),或者自己新建一个安卓工程
(如何导入从unity导出来的工程File->New->Android->Android Project from Existing Code ->Root  Directory ->Browse)
 2.1在工程里的lib文件中将官方文件的导入,就可以在自己的应用中使用其他应用了,分别在lib根目录和armeabi-v7a中加入不同文件unity3d调用Android的java代码实现地图的连接
 2.2
右键工程-》Properties,加入同样文件
 unity3d调用Android的java代码实现地图的连接

3  在工程下的src下的包下新建一个类,类名为MainActivity,让它继承自UnityPlayerActivity
4  在类中写入以下代码
public class MainActivity extends UnityPlayerActivity{
    Context mContext=null;
        @Override protected void onCreate (Bundle savedInstanceState)
        {
                super.onCreate(savedInstanceState);
                mContext=this;
        }
        public String GetJavaString()
        {
                return "i am Hello";
        }
   public void testmap()
   {
           Intent intent = new Intent(mContext,TestMap.class);
           this.startActivity(intent);

   }
}
5  申请**,在百度LBS中,申请为开发者,然后创建应用,应用类型为 Android SDK
输入开发版**,该**从eclipse中的window -》preference-》 Android-》build 中的SHA
fingerprint中获得,输入包名,点击提交,返回刚刚的连接,可以看到自己刚刚创建的工程以及**,复制**。

6   在AndroidManifest.xml中添加开发钥匙、所需权限等信息:注意位置,
在application下写入一下代码
 <meta-data 
        android:name="com.baidu.lbsapi.API_KEY" 
        android:value="zpFW295M9aMwLcvad961DBsR6iafIcdt" /> 
在第6行左右的很长的一句中的最后修改代码
android:name="com.luoshiqiye.ProductName.MainActivity">
在最后拷贝以下代码
 <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"/>
   6.1 在Layout中添加布局
unity3d调用Android的java代码实现地图的连接
 6.2

在应用程序创建时初始化SDK引用全局变量,因为SDK各功能组件使用时都需要调用SDKInitializer.initialize(getApplicationContext());所以建议该方法放在Application的初始化方法中

unity3d调用Android的java代码实现地图的连接
7 右击工程,出来properties,点击安卓,点击Is Library,点击Ok
8 点击project,点击clean,点击build all
9 在unity的asset文件夹下,新建Plugins,在Plugins目录下新建Android文件夹
10回到eclipse,复制四个文件夹,分别是res  libs  还有bin下面的unityplayeractivity.jar和AndroidManifest.xml
11 把刚刚复制的文件拷贝到unity中的Android文件夹
12  删除多余的文件,要删除三个地方,都是在libs文件夹下,删除libs目录中的unity-class.jar包 和x86文件夹【暂时不用不上】,再删除armeabi-v7a目录中libmain.so  libmono.so libunity.so 三个文件,不删除打包不了,会出错
13  新建场景,按平时的习惯,在panel中建两个button,一个用于调java代码,一个用于调用百度地图,给按钮attach点击事件,再建一个Label,后面有用
14 新建C#Scripts,挂在panel中, 打开vs或者其他开发工具编写代码,代码如下
 public UILabel _Label;
        void Start () {
        UIButton []btnarr=GetComponentsInChildren<UIButton>();
    for (int index = 0; index < btnarr.Length; index++)
    {
        UIEventListener.Get(btnarr[index].gameObject).onClick = unityAndJava;
    }
        }
 void unityAndJava(GameObject obj)
    {
        switch (obj.name)
        {
            case "CallFunction":
                Debug.Log("hhhh");
                CallMethod();
                break;
            case "ShowMap":
                JunmMap();
                break;
        }
 void CallMethod()
    {
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

        _Label.text = jo.Call<string>("GetJavaString");
    }
void CallMethod()
    {
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

        _Label.text = jo.Call<string>("GetJavaString");
    }
15 导出为apk格式,点击build settings,点击playerseting,在otherseting中必须改包名,包名与eclipse中的一样。
16,测试,点击调用安卓的按钮,会出来文字就是成功的。
17  接下来,要实现第二个按钮的功能,回到eclipse中
18  在工程的src的包下新建一个class类,类名随意,新建完成后让这个类继承自Activity
19  在类中写入以下代码
MapView mMapView;
        @Override protected void onCreate (Bundle savedInstanceState)
        {
                super.onCreate(savedInstanceState);
                SDKInitializer.initialize(getApplicationContext());
                setContentView(R.layout.activity_main);
                mMapView=(MapView)findViewById(R.id.bmapView);
        }

        // Quit Unity
        @Override protected void onDestroy ()
        {
                mMapView.onDestroy();
                super.onDestroy();
        }

        // Pause Unity
        @Override protected void onPause()
        {
                super.onPause();
                mMapView.onPause();
        }

        // Resume Unity
        @Override protected void onResume()
        {
                super.onResume();
                mMapView.onResume();
        }
}

20 在AndroidManifest.xml的application中加入以下代码
 <activity android:name="com.luoshiqiye.ProductName.TestMap" android:theme="@android:style/Theme.NoTitleBar.Fullscreen">   

21 至此,准备工作完成了,点击project下的clean和build,把unity中的AndroidManifes.xml和unityplayeractivity.jar删除掉,重新从eclipses中导入。
22,从unity中导出apk,进行测试。点击显示地图按钮会出现百度地图,表示成功