unity制作app(3)--gps定位

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放到上面以后,任务顺利完成

 

  • 11
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值