一.在高德官网下载需要对应的SDK http://lbs.amap.com/api/android-location-sdk
通过SHA1值获取对应的key值
a.SHA1值得获取: 1.在cmd中定位到 .android
2.输入keytool -list -v -keystore debug.keystore 口令是:android
二.导入下载的高德sdk 和classes jar文件放在lib文件下
并点击右键添加依赖
三.编写主函数
public class MainActivity extends UnityPlayerActivity
{
//声明mLocationClient对象
public AMapLocationClient mLocationClient = null;
public AMapLocationClientOption mLocationOption = null;
private String LocationInfo;
private String ErrorInfo="";
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
//获取定位信息
public String[] GetInfo()
{
String[] a=new String[2];
a[0]=this.LocationInfo;
a[1]=this.ErrorInfo;
startLocation();
return a;
}
protected void onStart()
{
super.onStart();
}
private void startLocation()
{
this.mLocationClient = new AMapLocationClient(getApplicationContext());
//回调监听
this.mLocationClient.setLocationListener(this.mLocationListener);
//初始化定位参数
this.mLocationOption = new AMapLocationClientOption();
this.mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
this.mLocationOption.setInterval(1000L);
this.mLocationOption.setHttpTimeOut(10000l);
this.mLocationOption.setNeedAddress(true);
this.mLocationClient.setLocationOption(this.mLocationOption);
this.mLocationClient.startLocation();
}
public AMapLocationListener mLocationListener = new AMapLocationListener() {
@Override
public void onLocationChanged(AMapLocation location) {
if (location != null) {
if (location.getErrorCode() == 0) {
StringBuffer sb = new StringBuffer(256);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date(location.getTime());
String time=df.format(date);
sb.append("时间: " + time);
sb.append("\n纬度:" + location.getLatitude());
sb.append("\n经度:" + location.getLongitude());
sb.append("\n精度:" + location.getAccuracy());
sb.append("\n地址:" + location.getAddress());
sb.append("\n国家信息:" + location.getCountry());
sb.append("\n省信息:" + location.getProvince());
sb.append("\n城市信息:" + location.getCity());
sb.append("\n城区信息:" + location.getDistrict());
sb.append("\n街道信息:" + location.getStreet());
sb.append("\n街道门牌号信息:" + location.getStreetNum());
sb.append("\n城市编码:" + location.getCityCode());
sb.append("\n地区编码:" + location.getAdCode());
LocationInfo = sb.toString();
}else {
StringBuffer errorinfo = new StringBuffer(256);
errorinfo.append("错误代码:"+location.getErrorCode());
errorinfo.append("\n"+location.getErrorInfo());
ErrorInfo=errorinfo.toString();
}
}
}
};
四.将模块打包成aar格式供unity交互
修改 build.gradle文件
第一步:将apply plugin: 'com.android.appcation'修改为
apply plugin: 'com.android.library'
第二部:删除 applicationId "com.test.sdk1"
第三步:在AndroidMainfest文件中修改
android:theme="@android:style/Theme.NoTitleBar"> 添加
<meta-data android:name="unityplayer.UnityActivity" android:value="true"/>
第四步:在AndroidManifest.xml的application标签中配置Key:
<meta-data android:name="com.amap.api.v2.apikey" android:value="您的Key"></meta-data>
在application标签中声明service组件:
<service android:name="com.amap.api.location.APSService"></service>
在AndroidManifest.xml中配置权限:
<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!--获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!--用于访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission>
<!--用于申请获取蓝牙信息进行室内定位-->
<uses-permission android:name="android.permission.BLUETOOTH"></uses-permission>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission>
最后build就可以打包成aar包了
五.unity中访问android
将打包出来的aar文件和AndroidMainifest文件放在Plugins/Android文件夹下
此时就可以编写c#代码了
public class Test : MonoBehaviour
{
public Text content;
public Button button;
AndroidJavaClass jc;
AndroidJavaObject jo;
void Start()
{
content.text = "654321";
OnStart();
}
public void GetLocation()
{
string[] a;
OnStart();
a = jo.Call<string[]>("GetInfo");
content.text = a[0];
if (a[1] != "")
{
content.text = a[1];
}
}
void OnStart()
{
jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
}
unity调用android中的一些函数
这样就简单的实现高德的定位功能啦!