一、准备
高德开发者页面注册产品
1.1 http://www.cnblogs.com/U-tansuo/archive/2013/04/25/unity3d_android_sign.html
1.2填写应用应用信息
1.3下载
解压得到 AMap_Location_V3.6.1_20171012.jar
二.新建Eclipse项目
2.1首先新建一个Android工程,在最小SDK版本里选4.0以上,不然在Unity打包的时候会报错。
2.2导入AMap_Location_V3.6.1_20171012.jar和Unity提供的JAR库classes.jar
位置:
D:\Program Files\Unity17103\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Development\Classes
2.3 Java代码
package com.mirror.locationtest;import android.os.Bundle;import android.util.Log;import com.amap.api.location.AMapLocation;import com.amap.api.location.AMapLocationClient;import com.amap.api.location.AMapLocationClientOption;import com.amap.api.location.AMapLocationClientOption.AMapLocationMode;import com.amap.api.location.AMapLocationListener;import com.unity3d.player.UnityPlayerActivity;;public class MainActivity extends UnityPlayerActivity { //声明AMapLocationClient类对象 public AMapLocationClient mLocationClient = null; //声明AMapLocationClientOption对象 public AMapLocationClientOption mLocationOption = null; //定位回调字符串 private String LocationInfo = "Init String~"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } public String GetInfo(){ startLocation(); return LocationInfo; } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); } private void startLocation(){ //初始化定位 mLocationClient = new AMapLocationClient(getApplicationContext()); //设置定位回调监听 mLocationClient.setLocationListener(mLocationListener); //初始化AMapLocationClientOption对象 mLocationOption = new AMapLocationClientOption(); //设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。 mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy); //设置定位间隔,单位毫秒,默认为2000ms,最低1000ms。 mLocationOption.setInterval(2000); //给定位客户端对象设置定位参数 mLocationClient.setLocationOption(mLocationOption); //启动定位 mLocationClient.startLocation(); } public AMapLocationListener mLocationListener = new AMapLocationListener() { @Override public void onLocationChanged(AMapLocation location) { // TODO Auto-generated method stub if (location != null) { if (location.getErrorCode() == 0) { StringBuffer sb = new StringBuffer(256); sb.append("时间: "); sb.append(location.getTime()); sb.append("\n纬度:"); sb.append(location.getLatitude()); sb.append("\n纬度:"); sb.append(location.getLongitude()); sb.append("\n精度:"); sb.append(location.getAccuracy()); sb.append("\n地址:"); sb.append(location.getAddress()); sb.append("\n国家信息:"); sb.append(location.getCountry()); sb.append("\n省信息:"); sb.append(location.getProvince()); sb.append("\n城市信息:"); sb.append(location.getCity()); sb.append("\n城区信息:"); sb.append(location.getDistrict()); sb.append("\n街道信息:"); sb.append(location.getStreet()); sb.append("\n街道门牌号信息:"); sb.append(location.getStreetNum()); sb.append("\n城市编码:"); sb.append(location.getCityCode()); sb.append("\n地区编码:"); sb.append(location.getAdCode()); sb.append("\n定位点AOI信息:"); sb.append(location.getAoiName()); LocationInfo = sb.toString(); } else { mLocationClient.stopLocation(); mLocationClient.startLocation(); LocationInfo ="定位出现错误,"+location.getErrorCode()+","+location.getErrorInfo(); } } else { LocationInfo="定位彻底失败"; } } };}
2.4AndroidManifest.xml
2.5Eclipse选中我们的工程文件夹,可以先点击工具栏的Project->clean,再Project->Build Project。然后右键Export,选导出为JAR文件导出jar包
2.6Unity部分
将安卓工程的文件拷贝到Unity工程的Plugins->Android文件夹里。没有这个目录的话需要自己创建一个。文件夹目录如下,把我们刚刚导出的JAR文件放在的bin文件夹中,另外还需要把我们的安卓工程目录里把libs文件夹和res文件夹以及AndroidManifest文件拷贝进去,注意拷贝完要把libs文件夹里面的classes.jar文件删掉,不然文件会冲突
2.7代码GetLocationInfo.CS
using UnityEngine;using UnityEngine.UI;public class GetLocationInfo : MonoBehaviour { public Text text; // Use this for initialization void Start() { InvokeRepeating("StartLocation", 1, 5); } public void StartLocation() { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic("currentActivity"); text.text = jo.Call ("GetInfo"); }}
2.8运行结果
2.9Unity打包配置
三根据返回错误代码判断错误
3.1错误代码对照表
http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode