有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Unity Android服务

我正在找人向我解释,当应用程序未打开时,如何在Unity上运行Android GPS服务。 我正在创建一个应用程序,在其中我必须找到用户,并找出他们是否在某个位置。 有没有人对如何启动安卓服务,在应用程序不运行时检索GPS并使用它执行任务有很好的指导

服务应该做什么:

  1. 启动安卓GPS服务
  2. 检查用户是否靠近兴趣点
  3. 发送通知

共 (1) 个答案

  1. # 1 楼答案

    我无法想象会有任何“法律问题”——Android定位服务基本上是“Android的一部分”

    不管怎样:

    下面是一篇好文章:

    How to Access GPS Location in Unity, 没有这样的德夫 2020年7月1日

    以下是本文中的示例代码:

    using UnityEngine;
    using System.Collections;
    
    public class TestLocationService : MonoBehaviour
    {
        IEnumerator LocationCoroutine() {
        // Uncomment if you want to test with Unity Remote
    /*#if UNITY_EDITOR
            yield return new WaitWhile(() => !UnityEditor.EditorApplication.isRemoteConnected);
            yield return new WaitForSecondsRealtime(5f);
    #endif*/
    #if UNITY_EDITOR
            // No permission handling needed in Editor
    #elif UNITY_ANDROID
            if (!UnityEngine.Android.Permission.HasUserAuthorizedPermission(UnityEngine.Android.Permission.CoarseLocation)) {
                UnityEngine.Android.Permission.RequestUserPermission(UnityEngine.Android.Permission.CoarseLocation);
            }
    
            // First, check if user has location service enabled
            if (!UnityEngine.Input.location.isEnabledByUser) {
                // TODO Failure
                Debug.LogFormat("Android and Location not enabled");
                yield break;
            }
    
    #elif UNITY_IOS
            if (!UnityEngine.Input.location.isEnabledByUser) {
                // TODO Failure
                Debug.LogFormat("IOS and Location not enabled");
                yield break;
            }
    #endif
            // Start service before querying location
            UnityEngine.Input.location.Start(500f, 500f);
                    
            // Wait until service initializes
            int maxWait = 15;
            while (UnityEngine.Input.location.status == LocationServiceStatus.Initializing && maxWait > 0) {
                yield return new WaitForSecondsRealtime(1);
                maxWait ;
            }
    
            // Editor has a bug which doesn't set the service status to Initializing. So extra wait in Editor.
    #if UNITY_EDITOR
            int editorMaxWait = 15;
            while (UnityEngine.Input.location.status == LocationServiceStatus.Stopped && editorMaxWait > 0) {
                yield return new WaitForSecondsRealtime(1);
                editorMaxWait ;
            }
    #endif
    
            // Service didn't initialize in 15 seconds
            if (maxWait < 1) {
                // TODO Failure
                Debug.LogFormat("Timed out");
                yield break;
            }
    
            // Connection has failed
            if (UnityEngine.Input.location.status != LocationServiceStatus.Running) {
                // TODO Failure
                Debug.LogFormat("Unable to determine device location. Failed with status {0}", UnityEngine.Input.location.status);
                yield break;
            } else {
                Debug.LogFormat("Location service live. status {0}", UnityEngine.Input.location.status);
                // Access granted and location value could be retrieved
                Debug.LogFormat("Location: " 
                    + UnityEngine.Input.location.lastData.latitude + " " 
                    + UnityEngine.Input.location.lastData.longitude + " " 
                    + UnityEngine.Input.location.lastData.altitude + " " 
                    + UnityEngine.Input.location.lastData.horizontalAccuracy + " " 
                    + UnityEngine.Input.location.lastData.timestamp);
    
                var _latitude = UnityEngine.Input.location.lastData.latitude;
                var _longitude = UnityEngine.Input.location.lastData.longitude;
                // TODO success do something with location
            }
    
            // Stop service if there is no need to query location updates continuously
            UnityEngine.Input.location.Stop();
        }
    }