gpt4 book ai didi

android - 在 Android 上从 Unity3D 运行谷歌地图应用程序,立即开始导航

转载 作者:行者123 更新时间:2023-11-29 22:44:05 24 4
gpt4 key购买 nike

对于我正在构建的一个小演示,我试图通过打开一个 URL,例如 Application.OpenURL( "https://www.google .com/maps?daddr=Some+Address");。虽然这会导致 Google map 应用程序正确打开,让我大致了解可能的路线,但我想跳过它并立即开始导航,比如说,使用最短路线(或任何路线,这真的无关紧要) .我想这可以 usually be accomplished with Intents , 但似乎 Unity 没有为此展示接口(interface)。

还有其他方法可以实现吗?

最佳答案

2018.3 版本开始,Unity 允许您将 .java 文件添加到您的 Unity 项目中,并在您构建 Android 播放器时编译它们。

1) 将输出的 UnityAndroidLocation.java 文件复制到您的 Unity 项目的 Assets/Plugins/Android 目录中。

2) 转到:[文件] > [build设置] > [播放器设置] > [播放器] 并复制包名称。

3) 在这两个类中找到 "ual.ual.ual" 包名称并将其替换为您在步骤 2) 中复制的名称。


“UnityAndroidLocation.cs”类:

using UnityEngine;
public class UnityAndroidLocation : MonoBehaviour
{
#if UNITY_ANDROID || UNITY_EDITOR
private static AndroidJavaObject plugin = null;
#endif


// Use this for initialization
void Awake()
{
#if UNITY_ANDROID && !UNITY_EDITOR
plugin = new AndroidJavaClass("ual.ual.ual.UnityAndroidLocation").CallStatic<AndroidJavaObject>("instance");
#endif
}


/// <summary>
/// <para>Open Google Map with Specific Adress.</para>
/// <para>Adress: [City, street]</para>
/// </summary>
/// <param name="Adress">Adress.</param>
public void GoogleMapWithAdress(string Adress)
{
plugin.Call("GoogleMapWithAdress", Adress);
}

/// <summary>
/// <para>Open Google Map with Specific Coordinate.</para>
/// <para>Zoom (integer number 2-23)</para>
/// </summary>
/// <param name="latitude">Latitude.</param>
/// <param name="longitude">Longitude.</param>
/// <param name="zoom">Zoom.</param>
public void GoogleMapWithCoordinate(float latitude, float longitude, int zoom)
{
plugin.Call("GoogleMapWithCoordinate", latitude, longitude, zoom);
}
}

“UnityAndroidLocation.java”类:

package ual.ual.ual;

import android.content.Intent;
import android.net.Uri;
import com.unity3d.player.UnityPlayer;

public class UnityAndroidLocation {
private static UnityAndroidLocation _instance;

public UnityAndroidLocation() {
}

public void GoogleMapWithAdress(String Adress) {
String uri = "geo:0,0?q=" + Adress;
Intent mapIntent = new Intent("android.intent.action.VIEW", Uri.parse(uri));
UnityPlayer.currentActivity.startActivity(mapIntent);
}

public void GoogleMapWithCoordinate(float latitude, float longitude, int zoom) {
if (zoom < 2) {
zoom = 2;
}

if (zoom > 23) {
zoom = 23;
}

String uri = "geo:" + latitude + "," + longitude + "?z=" + zoom;
Intent mapIntent = new Intent("android.intent.action.VIEW", Uri.parse(uri));
UnityPlayer.currentActivity.startActivity(mapIntent);
}

public static UnityAndroidLocation instance() {
if (_instance == null) {
_instance = new UnityAndroidLocation();
}

return _instance;
}
}

注意:例如,如果您的包名称是“com.my.app”,则结果名称将是:

“UnityAndroidLocation.cs”类:

plugin = new AndroidJavaClass("com.my.app.UnityAndroidLocation").CallStatic<AndroidJavaObject>("instance");

“UnityAndroidLocation.java”类:

package com.my.app;

import android.content.Intent;
import android.net.Uri;
import com.unity3d.player.UnityPlayer;

关于android - 在 Android 上从 Unity3D 运行谷歌地图应用程序,立即开始导航,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58712128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com