【问题标题】:Open another app and pass in url打开另一个应用程序并传入 url
【发布时间】:2017-01-18 23:22:57
【问题描述】:

当我点击一个按钮时,我正在尝试统一打开 Google+ 应用程序。 我在我的 android 设备上运行该应用程序,但它不工作 这是我使用的代码

Application.OpenURL ("gplus://plus.google.com/+JewelMash");

此代码有效,但它会提示您选择使用浏览器或 google + 应用程序打开它

Application.OpenURL ("https://plus.google.com/+JewelMash");

【问题讨论】:

  • 但它不起作用.....什么不起作用?您预计会发生什么以及目前正在发生什么?
  • 谢谢你的回复我正在尝试做这样的事情[链接]stackoverflow.com/questions/35544165/…这行代码代码Application.OpenURL("plus.google.com/+JewelMash");提示您在 g+ 应用程序或手机上的浏览器之间进行选择,如果您选择浏览器,则会打开 google plus 页面。但如果您选择 google plus 应用程序,则会显示此错误 [link]postimg.org/image/50lufh0zn 。但 Application.OpenURL ("gplus://plus.google.com/+JewelMash");没有打开 google + 应用
  • 好的,检查我的答案。

标签: c# android ios unity3d


【解决方案1】:

Application.OpenURL 函数无法做到这一点。我以前做过,愿意分享。您可以制作一个 Java 插件来执行此操作,也可以使用 AndroidJavaClass 和 C# 来执行此操作。我是用 C# 做的,因为这是一个简单的插件。

打开任何应用程序:

public bool openUrl(string packageName)
{
    #if UNITY_ANDROID
    AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject unityActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaObject pManager = unityActivity.Call<AndroidJavaObject>("getPackageManager");

    AndroidJavaObject intent = null;
    try
    {
        intent = pManager.Call<AndroidJavaObject>("getLaunchIntentForPackage", packageName);
        unityActivity.Call("startActivity", intent);
        return true;
    }
    catch (Exception e)
    {
        Debug.LogWarning("Failed to Opeen App: " + e.Message);
        //Open with Browser
        string link = "https://play.google.com/store/apps/details?id=" + packageName + "&hl=en";

        Application.OpenURL(link);
        return false;
    }
    #endif
    return false;
}

用法

bool success = openUrl("com.google.android.apps.plus");

打开另一个应用程序然后传入 URL:

public bool openUrl(string packageName, string url)
{
    #if UNITY_ANDROID
    AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject unityActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaObject pManager = unityActivity.Call<AndroidJavaObject>("getPackageManager");

    //For accessing static strings(ACTION_VIEW) from android.content.Intent
    AndroidJavaClass intentStaticClass = new AndroidJavaClass("android.content.Intent");
    string actionView = intentStaticClass.GetStatic<string>("ACTION_VIEW");

    //Create Uri
    AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");
    AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse", url);

    //Psss ACTION_VIEW and Uri.parse to the intent
    AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent", actionView, uriObject);

    try
    {
        if (pManager.Call<AndroidJavaObject>("getPackageInfo", packageName, 0) != null)
        {
            intent.Call<AndroidJavaObject>("setPackage", packageName);
        }
    }
    catch (Exception e)
    {
        Debug.LogWarning("Failed to Open App 1: " + e.Message);
        return false;
    }

    try
    {
        unityActivity.Call("startActivity", intent);
        return true;
    }
    catch (Exception e)
    {
        Debug.LogWarning("Failed to Open App 2: " + e.Message);
        //Open with Browser
        string link = "https://play.google.com/store/apps/details?id=" + packageName + "&hl=en";

        Application.OpenURL(link);
        return false;
    }
    #endif
    return false;
}

用法

 bool success = openUrl("com.google.android.apps.plus", "https://plus.google.com/+JewelMash");

您正在寻找第二个代码。如果您想查找另一个应用程序的包名称,请使用下图:

此解决方案适用于 Android。您将需要 Object-C 插件在 iOS 中执行此操作。我建议你问一个关于如何在 iOS 中执行此操作的新问题。

【讨论】:

  • 0 否决票 接受 谢谢你的回答 open url 适用于其他应用程序,如 twitter facebook 和 instagram(它打开默认应用程序)但对于 google+ 它不会打开应用程序,也许这个 url 不是正确的 Application.OpenURL ("gplus://plus.google.com/+JewelMash");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
  • 2011-08-05
  • 2019-08-01
相关资源
最近更新 更多