首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >打开另一个应用程序并传入url

打开另一个应用程序并传入url
EN

Stack Overflow用户
提问于 2017-01-18 23:22:57
回答 1查看 3.2K关注 0票数 0

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

代码语言:javascript
复制
Application.OpenURL ("gplus://plus.google.com/+JewelMash");

这段代码可以工作,但它会提示您选择使用浏览器或google +应用程序打开它。

代码语言:javascript
复制
Application.OpenURL ("https://plus.google.com/+JewelMash");
EN

回答 1

Stack Overflow用户

发布于 2017-01-19 15:35:42

Application.OpenURL函数不能这样做。我以前做过这件事,并且愿意分享。您可以制作一个Java插件来完成这个任务,也可以使用AndroidJavaClass和C#来完成。我是在C#做的,因为这是一个简单的插件。

要打开任何应用程序:

代码语言:javascript
复制
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;
}

使用

代码语言:javascript
复制
bool success = openUrl("com.google.android.apps.plus");

若要打开另一个应用程序,请传入Url:

代码语言:javascript
复制
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;
}

使用

代码语言:javascript
复制
 bool success = openUrl("com.google.android.apps.plus", "https://plus.google.com/+JewelMash");

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

这个解决方案是针对Android的。在iOS中,您将需要Object插件来完成这个任务。我建议您提出一个关于如何在iOS中这样做的新问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41731238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档