Unity版本 2020

第一步首先去高德开放平台注册账号然后申请Key

高德开放平台 | 高德地图API

注册好账号之后 点击控制台 然后选择管理key 新建一个应用

选择添加  然后创建一个key 选择Android平台  SHA1码获取方式参考我的另一篇博客

Android 签名文件.keystore转换.jks_小张不爱写代码的博客-CSDN博客_keystore转jks

然后直接创建key即可

创建完毕之后去下载定位SDK

相关下载-Android 定位SDK | 高德地图API

打开Unity创建一个Unity项目

并创建如下脚本

using UnityEngine;
using UnityEngine.UI;public class Sdk : MonoBehaviour
{public Text t;private AndroidJavaClass jc;private AndroidJavaObject jo;private void Awake(){if (Application.platform == RuntimePlatform.Android){jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");jo = jc.GetStatic<AndroidJavaObject>("currentActivity");}}public void StartAMap(){switch (Application.platform){case RuntimePlatform.Android:jo.Call("StartAMap");break;default:StopAMapCallBack();break;}}public void StopAMap(){switch (Application.platform){case RuntimePlatform.Android:jo.Call("StopAMap");break;default:break;}}public void StartAMapCallBack(string msg){t.text = msg;}public void StopAMapCallBack(){t.text = "1111";}
}

然后创建如下结构 Button点击事件分别指向StartAMap和StopAMap即可

然后直接出包导出AndroidStudio项目

导出完成之后 现在AS工程中的Libs文件夹中放入解压的高德SDK jar包

导入之后在如图位置写入如下代码

implementation fileTree(dir: 'libs', include: ['*.jar'])

在AndroidManifest.xml上面写入如下权限

  <!--用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!--用于访问GPS定位--><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><!--用于获取运营商信息,用于支持提供运营商信息相关的接口--><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!--用于访问wifi网络信息,wifi信息会用于进行网络定位--><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><!--用于获取wifi的获取权限,wifi信息会用来进行网络定位--><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><!--用于访问网络,网络定位需要上网--><uses-permission android:name="android.permission.INTERNET" /><!--用于读取手机当前的状态--><uses-permission android:name="android.permission.READ_PHONE_STATE" /><!--用于写入缓存数据到扩展存储卡--><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"tools:ignore="ScopedStorage" /><!--用于申请调用A-GPS模块--><uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /><!--如果设置了target >= 28 如果需要启动后台定位则必须声明这个权限--><uses-permission android:name="android.permission.FOREGROUND_SERVICE"/><!--如果您的应用需要后台定位权限,且有可能运行在Android Q设备上,并且设置了target>28,必须增加这个权限声明--><uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"tools:ignore="ScopedStorage" />

在AndroidManifest.xml的Application节点内写入如下内容

  <meta-dataandroid:name="com.amap.api.v2.apikey"android:value="6c8580a005a4f6d162f59e17ace1fbca" /><service android:name="com.amap.api.location.APSService" />

打开UnityPlayerActivity脚本 在末尾加入如下代码 用以动态申请权限

//权限管理
private static final String[] PERMISSIONS =
{Manifest.permission.INTERNET,Manifest.permission.ACCESS_COARSE_LOCATION,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.ACCESS_NETWORK_STATE,Manifest.permission.ACCESS_WIFI_STATE,Manifest.permission.CHANGE_WIFI_STATE,Manifest.permission.READ_PHONE_STATE,Manifest.permission.ACCESS_LOCATION_EXTRA_COMMANDS,Manifest.permission.BLUETOOTH,Manifest.permission.BLUETOOTH_ADMIN,
};
private static final int PERMISSIONS_CODE = 1;
//申请权限
private void requestPermission()
{// 当API大于 23 时,才动态申请权限if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){ActivityCompat.requestPermissions(this,PERMISSIONS,PERMISSIONS_CODE);}
}@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
{super.onRequestPermissionsResult(requestCode, permissions, grantResults);switch (requestCode) {case PERMISSIONS_CODE://权限请求失败for(int i=0;i<grantResults.length-1;i++){if(grantResults[i] != PackageManager.PERMISSION_GRANTED){Log.e("Permissions", "onRequestPermissionsResult: 权限请求失败:"+permissions[i].toString());}}break;}
}

然后在UnityPlayerActivity脚本中的OnCreate方法中调用requestPermission方法来申请权限

新创建一个类 写入如下代码

package com.unity3d.player.GaoDe;
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.AMapLocationListener;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;public class GaoDe {private static GaoDe instance = null;private static UnityPlayerActivity ccActivity = null;public static GaoDe Ins() {if (instance == null) {instance = new GaoDe();}return instance;}//声明AMapLocationClient类对象public AMapLocationClient mLocationClient = null;//声明定位回调监听器public AMapLocationListener mLocationListener = null;//声明AMapLocationClientOption对象public AMapLocationClientOption mLocationOption = null;public void Init(UnityPlayerActivity act){ccActivity =  act;//初始化定位AMapLocationClient.updatePrivacyShow(ccActivity, true, true);AMapLocationClient.updatePrivacyAgree(ccActivity, true);try {//初始化定位mLocationClient = new AMapLocationClient(ccActivity);}catch (Exception e){e.printStackTrace();Log.d("Unity", "UnityPlayerActivity Init error: "+e);}//初始化AMapLocationClientOption对象mLocationOption = new AMapLocationClientOption();//设置定位监听mLocationListener = new AMapLocationListener() {@Overridepublic void onLocationChanged(AMapLocation aMapLocation) {OnLocationChanged(aMapLocation);}};//设置定位回调监听mLocationClient.setLocationListener(mLocationListener);//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);//设置定位间隔,单位毫秒,默认为2000ms,最低1000ms。mLocationOption.setInterval(1000);//单位是毫秒,默认30000毫秒,建议超时时间不要低于8000毫秒。mLocationOption.setHttpTimeOut(8000);//优先使用gpsmLocationOption.setGpsFirst(true);Log.d("Unity", "高德: InitOK");}private void OnLocationChanged(AMapLocation amapLocation){Log.d("Unity", "高德: OnLocationChanged");if(amapLocation == null) {amapLocation = mLocationClient.getLastKnownLocation();}if (amapLocation != null){Log.e("AmapError", "amapLocation~=null start:");mLocationClient.stopLocation();int errorCode = amapLocation.getErrorCode();Log.e("AmapError", "amapLocation~=null errorCode:"+errorCode);//定位成功回调信息,设置相关消息int locationType = amapLocation.getLocationType();//获取当前定位结果来源,如网络定位结果,详见定位类型表double longitude = amapLocation.getLongitude();//获取经度double latitude = amapLocation.getLatitude();//获取纬度String address = amapLocation.getAddress();String country = amapLocation.getCountry();String province = amapLocation.getProvince();String city = amapLocation.getCity();String district = amapLocation.getDistrict();String re = errorCode + "|" + longitude + "|" + latitude + "|" + address +"|"+ country +"|"+ province +"|"+ city +"|"+ district+"  errrrrrrr";Log.e("AmapError", "amapLocation~=null 位置信息:"+re);UnityPlayer.UnitySendMessage("Main Camera", "StartAMapCallBack", re);}else{//定位失败时,可通过ErrCode(错误码)信息来确定失败的原因,errInfo是错误信息,详见错误码表。Log.e("AmapError","location Error, ErrCode:"+ amapLocation.getErrorCode() + ", errInfo:"+ amapLocation.getErrorInfo());mLocationClient.stopLocation();UnityPlayer.UnitySendMessage("Main Camera", "StartAMapCallBack", "0|0|0");}}//开始定位public void StartAMap(){if(mLocationClient!=null) {//给定位客户端对象设置定位参数mLocationClient.setLocationOption(mLocationOption);//启动定位mLocationClient.startLocation();Log.d("Unity", "StartAMap: 已开启定位");}else{if(ccActivity!=null)Init(ccActivity);elseLog.d("Unity", "StartAMap: mLocationClient是空的");}}//停止定位public void StopAMap(){if(mLocationClient!=null) {mLocationClient.stopLocation();mLocationClient.onDestroy();mLocationOption = null;mLocationListener = null;UnityPlayer.UnitySendMessage("Main Camera", "StopAMapCallBack","");}}
}

打开UnityPlayerActivity脚本在最末尾加入如下代码 在OnCreate申请权限下面调用

GaoDe.Ins().Init(this); 用以初始化SDK

public void StartAMap(){GaoDe.Ins().StartAMap();
}public void StopAMap()
{GaoDe.Ins().StopAMap();
}

然后就可以打包apk进行测试了  出现如下结果即可

Unity Android 接入高德定位SDK相关推荐

  1. Android接入高德地图SDK 一引入高德sdk

    SHA1的获取: 然后输入cd .android 回车 在输入:keytool -list -v -keystore debug.keystore 在回车,密钥默认 android 添加 jar 文件 ...

  2. Android接入高德地图SDK,Android高德SDK 地图篇一:集成高德SDK

    Android高德SDK 地图篇一:集成高德SDK 大家好,这是系列博文的第一篇: 系列博文会完成以下功能 一. 地图篇:利用高德SDK实现滴滴出行的效 二. 导航篇:利用高德SDK实现滴滴司机端的效 ...

  3. Android接入高德地图SDK如何设置Key(发布版/测试版)

    设置key最重要的是获取SHA1,其他的很容易填写. 下面介绍如何获取SHA1,本人使用AndroidStudio开发. 一.发布版 对于一个新创建的应用,首先生成apk,在这个过程中AndroidS ...

  4. Android接入高德地图SDK 二显示小蓝点

    生成签名文件 在工具栏点击 Build 然后点击 Generate Signed Bundle / APK- 选择 APK 点击 Next 我这是新建完了,如果第一次点Create new- 记住保存 ...

  5. Android高德地图线优化,Android 接入高德地图SDK模块的优化点点滴滴

    起因: 由于在最近接手了一个关于导航的App,发现地图页面跳来跳去实在是卡顿地不行(运行在车载设备上的APP,机器性能实在是有限). 初步判断: 应该是是关于地图等控件的反复创建和销毁,给内存GC带来 ...

  6. android打包jar包给unity使用接入高德sdk,实现定位。

    https://blog.csdn.net/unity_http/article/details/79929454 https://blog.csdn.net/why1happy/article/de ...

  7. Android开发集成高德定位SDK实现定位功能。

    第一步:添加高德定位SDK依赖,导入框架有两种方式,第一种是可以到高德开放平台高德开放平台 | 高德地图API下载相关的jar包,然后将jar包放在项目的libs文件下,然后点击以依赖库的形式添加到项 ...

  8. Android集成谷歌定位sdk,概述-Android 定位SDK | 高德地图API

    什么是定位SDK Android 定位 SDK 是一套简单的LBS服务定位接口,您可以使用这套定位API获取定位结果.逆地理编码(地址文字描述).以及地理围栏功能. 面向的读者 Android 定位 ...

  9. Android有官方的GPS定位API,为什么还要使用百度/高德定位SDK ?

    1. 背景 小组在一个Demo项目中,图省事准备使用官方的GPS定位API. 但在我的印象中,官方的定位API是不好用的,一般都是用 高德地图/百度地图 的定位SDK的. 使用官方的定位API获取定位 ...

最新文章

  1. python Windows和Linux路径表示问题
  2. 昨天电脑问题 补昨日8-3复习内容 异常与文件操作
  3. 【大会】网络性能、安全与成本之困
  4. SWISHMAX2脚本整理及Swishmax使用技巧
  5. C语言向文件写入内容并读取显示
  6. 北理在线作业答案c语言,北理工19春《面向对象程序设计》在线作业【标准答案】...
  7. 【英语学习】【WOTD】regale 释义/词源/示例
  8. (67)Verilog HDL模块条件例化
  9. 一:HTML文本编译器 kindeditor-4.1.10 的使用 SpringMVC+jsp的实现
  10. Ansible详解(十五)——Ansible Role实战
  11. python写论文有帮助吗_python中有帮助函数吗
  12. 带分销小程序商城源码,完整代码分享
  13. python字符串出栈方法_Python学习之路_day_04(字符串与列表的内置方法)
  14. java移位操作示例
  15. [通讯方式] 串口通信
  16. 2017,在驻足间回首
  17. Java实现分割矩形
  18. 支付回答——如何理解借记和贷记
  19. 阿里财报中的饿了么:守正出奇
  20. 自定义九宫格控件NineGridLayout ,实现微信朋友圈图片九宫格显示

热门文章

  1. 中科院1区JGG微生物专刊征稿
  2. 【PWN系列】2015-Defcon Qualifier R0pbaby
  3. 【寒假每日一题】剪绳子(个人练习)详细题解+推导证明(第六天)
  4. 恩与爱是扯不开的 —— 李安
  5. Python学习之CSDN21天学习挑战赛计划之2
  6. Visual Studio开发环境介绍 及控件属性、事件
  7. 【自动化测试】Selenium IDE脚本编辑与操作(了解)
  8. 【Set】01-set参数
  9. 字符转换 提取一个字符串中的所有数字字符('0'……'9'),将其转换为一个整数输出。 首位不能是0
  10. 5G LTE窄带物联网(NB-IoT) 6