【发布时间】:2021-02-10 13:09:26
【问题描述】:
我的目标: 通过按下按钮,即可开始与特定人员的 whatsapp 视频通话。 我不太了解 Java,所以我想通过 Unity 中的 C# 来完成。
我试图通过将 this process 翻译成 C# 来复制它。
但是有问题,因为一旦按下按钮我只能访问whatsapp主页。
我还添加了从清单访问联系人的权限。
我正在手动完成所有操作,因此我将脚本粘贴到 android studio 上以查找具有 whatsapp 视频通话 mimetype 的特定联系人的 _id。
于是我尝试通过Unity的AndroidJavaClass翻译调用函数:
Java 代码:
public void videoCall(String id){
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse("content://com.android.contacts/data/" + id),
"vnd.android.cursor.item/vnd.com.whatsapp.video.call");
intent.setPackage("com.whatsapp");
startActivity(intent);
}
C#代码:
public static class Intentions
{
static string id = "5576";
static string data_url = "content://com.android.contacts/data/" + id;
static string type_url = "vnd.android.cursor.item / vnd.com.whatsapp.video.call";
public static AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
public static AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>
("currentActivity");
public static AndroidJavaObject packageManager = currentActivity.Call<AndroidJavaObject>
("getPackageManager");
public static AndroidJavaObject intent = packageManager.Call<AndroidJavaObject>
("getLaunchIntentForPackage", "com.whatsapp");
public static AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");
public static AndroidJavaObject uriData = uriClass.CallStatic<AndroidJavaObject>("parse", data_url);
public static void Launch()
{
intent.Call<AndroidJavaObject>("setAction", "android.intent.action.VIEW");
intent.Call<AndroidJavaObject>("setDataAndType", uriData, type_url);
if (IsAndroid())
{
currentActivity.Call("startActivity", intent);
}
}
public static bool IsAndroid()
{
#if UNITY_ANDROID && !UNITY_EDITOR
return true;
#else
return false;
#endif
}
}
【问题讨论】: