我在统一游戏中有一个反馈按钮,如果用户点击它,那么它应该启动一个默认的电子邮件应用程序,主题,电子邮件地址已经填写。我在Android应用程序中做过这个,但是如何从统一调用它?
除此之外,还有其他更好的反馈方法吗?
答案 0 :(得分:2)
你在做什么是插件。你不需要插件。
您只需发送电子邮件:
即可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);
}
要发送,请致电:
sendEmail("example@example.com", "Test", "This is a text\r\nAnother test\r\nAnd another text");
这适用于PC,Android和iOS。我不知道Mac。
现在,如果你仍想使用Android API,你仍然不需要为此制作插件。您可以使用AndroidJavaObject
并使用Android 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);
}
}
}
}
}
并称之为SendMail("test", "Message", false);
。您可以改进它并为其添加更多功能。最后一个例子是从here解除的。
答案 1 :(得分:1)
@程序员的(本机方法)答案是正确的;但是,当提示用户选择要发送电子邮件的应用程序时,用户很有可能选择电子邮件应用程序以外的其他应用程序;例如WhatsApp。我们不希望这种情况发生。如docs中所述,我们可以确保只向用户显示电子邮件应用程序的方法是使用Intent.ACTION_SENDTO
和intent.setData(Uri.parse("mailto:")
。
private void SendMail(string subject, string body)
{
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_SENDTO")))
{
//intent.setData(Uri.parse("mailto:"));
var uriClass = new AndroidJavaClass("android.net.Uri");
var uriObject = uriClass.CallStatic<AndroidJavaObject>("parse", "mailto:");
intentObject.Call<AndroidJavaObject>("setData", uriObject);
// intent.putExtra(Intent.EXTRA_SUBJECT, emailSubject);
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_SUBJECT"), subject);
//intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_EMAIL"), "youremail@abc.xyz");
string[] email = { "youremail@abc.xyz" };
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_EMAIL"), email);
// Setting emailBody
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);
}
}
}
}
}
用您要发送电子邮件的电子邮件替换youremail@abc.xyz
。
问题是,为什么要这么麻烦呢,而不是简单地发送如下所述的电子邮件:
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);
}
您可能想在电子邮件正文中添加HTML或某些非拉丁文本(例如,日语,阿拉伯语)。使用System.Uri.EscapeUriString
会使事情变得混乱。在这种情况下,本机方法将是您的选择方法。
答案 2 :(得分: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);
}
}
将其替换为您的活动和包名称
var jc = new AndroidJavaClass(&#34; com.xyz.abc.StartActivity&#34;);