[官方文档] http://docs.unity3d.com/Documentation/ScriptReference/LocationService.Start.html
为应用开启定位权限
示例代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Android;
/// <summary>
/// GPS测试
/// </summary>
public class GPSTest : MonoBehaviour
{
[SerializeField]
private Text mText;
public void OnClickGPS()
{
StartCoroutine(StartupGPS());
}
IEnumerator StartupGPS()
{
// 检测定位服务有没开启
if (!Input.location.isEnabledByUser)
{
mText.text = "定位服务未开启";
//请求GPS权限
Permission.RequestUserPermission(Permission.FineLocation);
yield break;
}
// 启动定位服务
Input.location.Start(5, 5);
// 等待定位服务初始化完成
int maxWait = 20;
while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0)
{
yield return new WaitForSeconds(1);
maxWait--;
mText.text = $"正在初始化位置服务({maxWait}s)";
}
// 如果定位服务在20秒内还未完成,则报告超时。
if (maxWait < 1)
{
mText.text = "连接GPS超时";
yield break;
}
// 如果连接失败,则会取消定位服务的使用
if (Input.location.status == LocationServiceStatus.Failed)
{
mText.text = "位置服务失败(用户拒绝访问位置服务)";
yield break;
}
else
{
//如果连接成功,则获取当前位置信息
//longitude(经度),latitude(纬度),altitude(海拔高度)
//horizontalAccuracy(水平精度),verticalAccuracy(垂直精度)
LocationInfo info = Input.location.lastData;
string text = string.Format(
"经度: {0}\n" +
"纬度: {1}\n" +
"水平精度: {2}\n" +
"垂直精度: {3}\n" +
"海拔高度: {4}\n" +
"时间戳: {5}",
info.longitude, info.latitude,
info.horizontalAccuracy, info.verticalAccuracy,
info.altitude,
info.timestamp);
mText.text = text;
}
//如果不再需要查询位置信息,则关闭服务
Input.location.Stop();
}
}
获取到的GPS位置信息