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

 

相关推荐

  1. unity 制作app实现底部导航栏和顶部状态栏

    2024-05-03 00:10:04       13 阅读
  2. Unity3D 制作MMORPG 3D地图编辑器详解

    2024-05-03 00:10:04       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-03 00:10:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-03 00:10:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-03 00:10:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-03 00:10:04       18 阅读

热门阅读

  1. Linux内核深入学习 - 内核同步

    2024-05-03 00:10:04       12 阅读
  2. web响应式页面是啥要注意啥

    2024-05-03 00:10:04       11 阅读
  3. C# Solidworks二次开发:枚举应用实战(第十讲)

    2024-05-03 00:10:04       11 阅读
  4. vue 组件组件通信方法

    2024-05-03 00:10:04       14 阅读
  5. 【QT进阶】自定义QGraphicsItem的实现设备节点

    2024-05-03 00:10:04       13 阅读
  6. 学习冒泡排序的可视化实现(一)

    2024-05-03 00:10:04       10 阅读