在Unity打电话?

时间:2018-02-21 12:37:09

标签: c# android unity3d

我在我的c#脚本中使用

Application.OpenURL("tel:+79011111115");

拨号器出现了,但没有打电话 如果是Java,我可以说它就像

一样
Intent call = new Intent(Intent.ACTION_DIAL, Uri.parse("tel:+79011111115"));

但我需要:

Intent call = new Intent(Intent.ACTION_CALL, Uri.parse("tel:+79011111115"));

在C#中是否有类似Java的ACTION_CALL? 提前致谢

2 个答案:

答案 0 :(得分:3)

您可以将Java代码转换为 .jar .aar 插件,从C#调用它。您还可以使用Unity的AndroidJavaClassAndroidJavaObject API,这完全消除了对Java编译插件的需求。

使用AndroidJavaClassAndroidJavaObject API,相当于以下 Java 代码:

Intent call = new Intent(Intent.ACTION_CALL, Uri.parse("tel:+79011111115"));
C#中的

如下:

string phoneNum = "tel: +79011111115";

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

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

//Pass ACTION_CALL and Uri.parse to the intent
AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent", actionCall, uriObject);

请记住,您必须启动Intent上的Activity才能完成它,以下是 Java 中的内容:

startActivity(call);

以下是启动活动的 C#代码中的相应代码:

AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject unityActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");

try
{
    //Start Activity
    unityActivity.Call("startActivity", intent);
}
catch (Exception e)
{
    Debug.LogWarning("Failed to Dial number: " + e.Message);
}

最后,就像在Java中一样,您还必须添加<uses-permission android:name="android.permission.CALL_PHONE"></uses-permission>权限,否则它将无法工作。有关如何向Unity添加此Android权限的信息,请参阅this帖子。

适用于 Android 6.0 及以上版本。您必须使用运行时权限。 This Github项目应该可以正常工作。

答案 1 :(得分:0)

将此用于Android。

Application.OpenURL("tel://[+1234567890]");