从 Unity 脚本调用 Android 电子邮件意图

Cha*_*kay 5 c# android unity-game-engine

我在 unity 游戏中有一个反馈按钮,如果用户点击它,那么它应该启动一个默认的电子邮件应用程序,主题、电子邮件地址已经填写。我已经在 Android 应用程序中完成了此操作,但是如何从 unity 调用它?

除了这个,还有其他更好的反馈方法吗?

Pro*_*mer 5

你在做什么是插件。你不需要插件。

您可以简单地发送电子邮件:

void sendEmail(string toEmail, string emailSubject, string emailBody)
{
    emailSubject = System.Uri.EscapeUriString(emailSubject);
    emailBody = System.Uri.EscapeUriString(emailSubject);
    Application.OpenURL("mailto:" + toEmail + "?subject=" + emailSubject + "&body=" + emailBody);
}
Run Code Online (Sandbox Code Playgroud)

要发送,请致电:

sendEmail("example@example.com", "Test", "This is a text\r\nAnother test\r\nAnd another text");
Run Code Online (Sandbox Code Playgroud)

这将适用于 PC、Android 和 iOS。我不知道Mac。

现在,如果您仍然想使用 Android API,您仍然不需要为此制作插件。您可以使用AndroidJavaObjectAndroid API使用和编写电子邮件代码。

private static void SendMail(string subject, string body, bool useHTML)
{
    using (var intentClass = new AndroidJavaClass("android.content.Intent"))
    {
        // intent = new Intent(Intent.ACTION_SEND);
        using (var intentObject = new AndroidJavaObject("android.content.Intent", intentClass.GetStatic<string>("ACTION_SEND")))
        {
            // Setting text type
            if (useHTML)
                // intent.setType("text/html");
                intentObject.Call<AndroidJavaObject>("setType", "text/html");
            else
                // intent.setType("message/rfc822");
                intentObject.Call<AndroidJavaObject>("setType", "message/rfc822");

            // intent.putExtra(Intent.EXTRA_SUBJECT, emailSubject);
            intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_SUBJECT"), subject);

            // Setting emailBody
            if (useHTML)
            {
                // intent.putExtra(Intent.EXTRA_TEXT, Html.fromHtml(emailBody));
                using (var html = new AndroidJavaClass("android.text.Html"))
                {
                    var htmlBody = html.CallStatic<AndroidJavaObject>("fromHtml", body);
                    intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), htmlBody);
                }
            }
            else
            {
                intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), body);
            }
            using (var unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
            {
                using (var currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity"))
                {
                    currentActivity.Call("startActivity", intentObject);
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

并调用它SendMail("test", "Message", false);。您可以改进它并为其添加更多功能。最后一个例子是从这里解除的。


San*_*bhu 0

单击按钮时,您必须调用:

  public void OpenActivity()
    {
        var androidJC = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        var jo = androidJC.GetStatic<AndroidJavaObject>("currentActivity");
        // Accessing the class to call a static method on it
        var jc = new AndroidJavaClass("com.xyz.abc.StartActivity");
        // Calling a Call method to which the current activity is passed
        jc.CallStatic("Call", jo);
    }

}
Run Code Online (Sandbox Code Playgroud)

将其替换为您的活动和包名称

var jc = new AndroidJavaClass("com.xyz.abc.StartActivity");