BlaXuan 发表于 2022-6-29 16:45

Unity 跳转Instagram App

一、ios直接跳转对应网址
         Application.OpenURL(url)
二、android
      1、判断是否有应用
using (var jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
    using (var currentActivity = jc.GetStatic<AndroidJavaObject>("currentActivity"))
    {
      using (var packageManager = currentActivity.Call<AndroidJavaObject>("getPackageManager"))
      {
            using (var pluginClass = new AndroidJavaClass("android.content.pm.PackageManager"))
            {
                int flag = pluginClass.GetStatic<int>("GET_META_DATA");
                var packages =packageManager.Call<AndroidJavaObject>("getInstalledApplications", flag);
                int count = packages.Call<int>("size");

                for (int i = 0; i < count; i++)
                {
                  var pkg = packages.Call<AndroidJavaObject>("get", i);
                  var pkgName = pkg.Get<string>("packageName");

                  if (pkgName == packageName)
                  {
                        Debug.LogWarning("ThirdAppUtil IsPackageInstalled" + packageName);
                        return true;
                  }
                }
            }
      }
    }
}      2、有应用后打开,packageName="com.instagram.android"
using (var jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
{
    using (var currentActivity = jc.GetStatic<AndroidJavaObject>("currentActivity"))
    {
      using (var packageManager = currentActivity.Call<AndroidJavaObject>("getPackageManager"))
      {
            using (var intent = packageManager.Call<AndroidJavaObject>("getLaunchIntentForPackage", packageName))
            {
                if (null != intent)
                {
                  AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");
                  AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");
                  intentObject.Call<AndroidJavaObject>("setAction",
                        intentClass.GetStatic<string>("ACTION_VIEW"));
                  AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri"); // 对应的安卓调用函数是Uri.parse()
                  AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse",urlScheme);
                  intentObject.Call<AndroidJavaObject>("setData", uriObject);
                  intentObject.Call<AndroidJavaObject>("setPackage",packageName); // 记得要set package他才知道在哪里运行url sheme,否则url会从默认的浏览器里打开
                  currentActivity.Call("startActivity", intentObject);
                }
            }
      }
    }
}
urlScheme获取,参考Instagram
         3、Instagram安装后未运行,跳转失败处理。manifest内添加包名
<queries>
    <!-- 声明将要查询的包名 -->
    <package android:name="com.instagram.android" />
</queries>
页: [1]
查看完整版本: Unity 跳转Instagram App