C# iOS上的GPS定位

C# iOS上的GPS定位,c#,unity3d,gps,C#,Unity3d,Gps,所以我在Unity3d 5.4.4f1中开发了一个类似于Pokemon Go for Android的应用程序,然后我最近在iOS 10.3中构建了它,发现Input.location根本不起作用。代码如下: public class Locate : MonoBehaviour { public float latitude; public float longitude; IEnumerator coroutine; IEnumerator Start(

所以我在Unity3d 5.4.4f1中开发了一个类似于Pokemon Go for Android的应用程序,然后我最近在iOS 10.3中构建了它,发现
Input.location
根本不起作用。代码如下:

public class Locate : MonoBehaviour {

    public float latitude;
    public float longitude;

    IEnumerator coroutine;

    IEnumerator Start() {
        coroutine = updateGPS();

        if (!Input.location.isEnabledByUser)
            yield break;

        Input.location.Start();

        int maxWait = 4;
        while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0) {
            yield return new WaitForSeconds(1);
            maxWait--;
        }

       if (maxWait < 1) {
            print("Timed out");
            yield break;
        }


        if (Input.location.status == LocationServiceStatus.Failed) {
            print("Unable to determine device location");
            yield break;
        } else {
            print("Location: " + Input.location.lastData.latitude + " " + Input.location.lastData.longitude + " " + Input.location.lastData.altitude + " " + Input.location.lastData.horizontalAccuracy + " " + Input.location.lastData.timestamp);
            longitude = Input.location.lastData.longitude;
            latitude = Input.location.lastData.latitude;

            StartCoroutine(coroutine);
        }
    }

    IEnumerator updateGPS() {
        float UPDATE_TIME = 1f;
        WaitForSeconds updateTime = new WaitForSeconds(UPDATE_TIME);

        while (true) {
            print("Location: " + Input.location.lastData.latitude + " " + Input.location.lastData.longitude + " " + Input.location.lastData.altitude + " " + Input.location.lastData.horizontalAccuracy + " " + Input.location.lastData.timestamp);

            longitude = Input.location.lastData.longitude;
            latitude = Input.location.lastData.latitude;

            yield return updateTime;
        }
    }

    void stopGPS() {
        Input.location.Stop();
        StopCoroutine(coroutine);
    }

    void OnDisable() {
        stopGPS();
    }
}
公共类定位:单行为{
公共浮动纬度;
公共浮标经度;
IEnumerator协同程序;
IEnumerator Start(){
coroutine=updateGPS();
如果(!Input.location.isEnabledByUser)
屈服断裂;
Input.location.Start();
int maxWait=4;
while(Input.location.status==LocationServiceStatus.Initializing&&maxWait>0){
返回新的WaitForSeconds(1);
maxWait--;
}
if(maxWait<1){
打印(“超时”);
屈服断裂;
}
if(Input.location.status==LocationServiceStatus.Failed){
打印(“无法确定设备位置”);
屈服断裂;
}否则{
打印(“位置:“+Input.Location.lastData.latitude+”“+Input.Location.lastData.longitude+”“+Input.Location.lastData.altitude+”“+Input.Location.lastData.HorizontalAccurance+”“+Input.Location.lastData.timestamp”);
经度=Input.location.lastData.longitude;
纬度=Input.location.lastData.latitude;
启动程序(协同程序);
}
}
IEnumerator updateGPS(){
浮动更新时间=1f;
WaitForSeconds updateTime=新的WaitForSeconds(更新时间);
while(true){
打印(“位置:“+Input.Location.lastData.latitude+”“+Input.Location.lastData.longitude+”“+Input.Location.lastData.altitude+”“+Input.Location.lastData.HorizontalAccurance+”“+Input.Location.lastData.timestamp”);
经度=Input.location.lastData.longitude;
纬度=Input.location.lastData.latitude;
收益率更新时间;
}
}
void stopGPS(){
Input.location.Stop();
StopCorroutine(Corroutine);
}
无效可禁用(){
stopGPS();
}
}

当我在研究这个问题时,有人说状态总是处于“初始化”状态,从不改变。我认为正在发生的另一件事是,iOS不允许应用程序使用location,但我进入了限制,将其设置为“始终”,但仍然为空。

从iOS 10开始,需要在info.plist文件中添加nsLocationwhenUsageDescription。这与在Android中将传感器权限添加到清单文件几乎相同

nsLocationWhenUsageDescription=“您使用此传感器的原因”


执行此操作时,您将被允许访问GPS传感器。

从iOS 10开始,您需要在info.plist文件中添加NSLocationWhenUsageDescription。这与在Android中将传感器权限添加到清单文件几乎相同

nsLocationWhenUsageDescription=“您使用此传感器的原因”


执行此操作时,您将被允许访问GPS传感器。

您的Unity和iOS版本是什么?我正在使用Unity3d 5.4.4f1和iOS 10.3将NSLOCATION添加到info.plist文件的UsageDescription时它应该是什么类型和值?另外,当我在上面输入时,在开头加上了“隐私”,去掉了N,并将单词隔开。我想这不是个问题,但我只是想确定一下。不管值是多少,我只是把它留空,它就工作了。你能把它贴出来作为答案吗?你的Unity和iOS版本是什么?我正在使用Unity3d 5.4.4f1和iOS 10.3将NSLocation添加到info.plist文件的UsageDescription时它应该是什么类型和值?另外,当我在上面输入时,在开头加上了“隐私”,去掉了N,并将单词隔开。我想这不是个问题,但我只是想确定一下。不管值是多少,我只是把它留空,它就工作了。你能把它作为答案贴出来,这样我就可以把它标记为正确的吗?