1.unity中定位Unity之GPS定位(高德解析)_unity gps定位-CSDN博客
代码需要稍微修改一下,先把脚本绑到一个button上试一试!
2.先去高德地图认证(app定位)
创建应用和 Key-Web服务 API | 高德地图API (amap.com)
3.代码大致如下所示:
using UnityEngine;
using System.Collections;
using LitJson;
using UnityEngine.Networking;
//using UnityTools;
using UnityEngine.Android;
namespace Location
{public class LocationTest : MonoBehaviour{private string longitude;//经度private string latitude;//纬度void Start() => StartCoroutine(StartGPS());IEnumerator StartGPS(){//Unity给我们提供的一个相关权限类 Permission,可以判断当前相关权限是否开启if (Permission.HasUserAuthorizedPermission(Permission.FineLocation)){//如果没有开启就提示开启权限Permission.RequestUserPermission(Permission.FineLocation);}Debug.LogError("开始获取GPS信息");// 检查位置服务是否可用 if (!Input.location.isEnabledByUser){Debug.Log("位置服务不可用");yield break;}// 查询位置之前先开启位置服务Debug.Log("启动位置服务");Input.location.Start();// 等待服务初始化 int maxWait = 20;while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0){Debug.Log(Input.location.status.ToString() + ">>>" + maxWait.ToString());yield return new WaitForSeconds(1);maxWait--;}// 服务初始化超时 if (maxWait < 1){Debug.Log("服务初始化超时");yield break;}// 连接失败 if (Input.location.status == LocationServiceStatus.Failed){Debug.Log("无法确定设备位置");yield break;}else{Debug.Log("Location: \n" +"纬度:" + Input.location.lastData.latitude + " \n" +"经度:" + Input.location.lastData.longitude + " \n" +"海拔:" + Input.location.lastData.altitude + " \n" +"水平精度:" + Input.location.lastData.horizontalAccuracy + " \n" +"垂直精度:" + Input.location.lastData.verticalAccuracy + " \n" +"时间戳:" + Input.location.lastData.timestamp);longitude = Input.location.lastData.longitude.ToString();latitude = Input.location.lastData.latitude.ToString();StartCoroutine(GetRequest("http://restapi.amap.com/v3/geocode/regeo?key=" + key + "&location=" + longitude + "," + latitude));}// 停止服务,如果没必要继续更新位置,(为了省电Input.location.Stop();}string key = ""; //去高德地图开发者申请IEnumerator GetRequest(string uri){using (UnityWebRequest webRequest = UnityWebRequest.Get(uri)){// Request and wait for the desired page.yield return webRequest.SendWebRequest();string[] pages = uri.Split('/');int page = pages.Length - 1;if (webRequest.isNetworkError){// Debug.Log(pages[page] + ": Error: " + webRequest.error);}else{JsonData jd = JsonMapper.ToObject(webRequest.downloadHandler.text);Debug.LogError("rn" + jd["regeocode"]["formatted_address"].ToString());}}}}
}
4.此时无论电脑,还是手机,都无法获得定位权限,在手机的应用权限中,甚至找不到应用!
Unity 在Unity端申请Android权限_unity android 权限-CSDN博客
具体的开启过程如下:权限是一劳永逸的,做做没坏处!
第一步:
第二步:在新建的Assets\Plugins\Android目录下 ,增加对应的权限!
所有的24个权限Android 中的危险权限详细整理_Android_脚本之家 (jb51.net)
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
第三步:此时依旧无法申请,手机权限管理中找不到unity应用,同时发现unity是可以调用手机模拟器的,这下任务简单了太多太多。
第四步:在手机安装的时候确实有权限提示,但程序执行后感觉动态链接是失效的
第五步:根据AI的回答,继续进行尝试吧,浪费时间了
第六步:此时other settings中API的等级情况如下图所示:
有已知
大胆推测是最低版本设置过高!修改为:
改了以后还不行!
第七步:再加一个launcher manifest,加了也不行
第八步:实测手机中已经开启了gps功能,也就是不会显示22。
但是27行的会出问题!
把start放到上面以后,任务顺利完成