Unity3D-调用Android系统邮件发送邮件,或调用系统分享去分享内容

来源:互联网 发布:oppo u525软件下载 编辑:程序博客网 时间:2024/04/27 13:26

最近在将项目移植到Android平台,虽然大部分的东西都不需要动,但是关于分享、反馈这类需要用到原生系统功能的,就需要单独去处理了!

其实发送邮件和分享是同样的道理,只是发送邮件的参数不同,最主要代码是这样的:

AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");            AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");            intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND"));            AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");            AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse", "file://" + destination);            intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject);            intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), "Can you beat my score?");            intentObject.Call<AndroidJavaObject>("setType", "image/jpeg");            AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");            AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");            AndroidJavaObject chooser = intentClass.CallStatic<AndroidJavaObject>("createChooser", intentObject, "Share your new score");            currentActivity.Call("startActivity", chooser);

其实就是利用unity提供的java接口,调用android系统自己的一个分享类,然后设置相关参数即可。

下面是完整代码,要想试试效果,直接把下面的代码复制到一个类里面,然后弄个按钮调用OnShareNative分享,调用OnConnect去调用邮箱

using System.Collections;using System.Collections.Generic;using UnityEngine;using System.IO;public class NativeShareAndroid : MonoBehaviour {public GameObject waitObject;private bool isProcessing = false;private bool isFocus = false;void Awake(){waitObject.SetActive(false);}public void OnShareNative(){if (!isProcessing){StartCoroutine(TakeScreenshot());}}public void OnQuitGame(){Application.Quit();}public void OnConnect(){if (!isProcessing){StartCoroutine(SendMailAndroid());}}private IEnumerator TakeScreenshot(){isProcessing = true;waitObject.SetActive(true);        yield return new WaitForEndOfFrame();var width = Screen.width;var height = Screen.height;var tex = new Texture2D(width, height, TextureFormat.RGB24, false);tex.ReadPixels(new Rect(0, 0, width, height), 0, 0);tex.Apply();        string destination = Path.Combine(Application.persistentDataPath, "shareAndroid001.png");File.WriteAllBytes(destination, tex.EncodeToPNG());        yield return new WaitForSeconds(0.3f);        if (!Application.isEditor)        {            AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");            AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");            intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND"));            AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");            AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse", "file://" + destination);            intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject);            intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), "Can you beat my score?");            intentObject.Call<AndroidJavaObject>("setType", "image/jpeg");            AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");            AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");            AndroidJavaObject chooser = intentClass.CallStatic<AndroidJavaObject>("createChooser", intentObject, "Share your new score");            currentActivity.Call("startActivity", chooser);            yield return new WaitForSeconds(1f);        }        yield return new WaitUntil(() => isFocus);        isProcessing = false;waitObject.SetActive(false);}void OnApplicationFocus(bool focusStatus){isFocus = focusStatus;}private IEnumerator SendMailAndroid(){isProcessing = true;waitObject.SetActive(true);if (!Application.isEditor){AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");            AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");            intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND"));// AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");            // AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse", "mailto:pz789asdf@163.com");            // intentObject.Call<AndroidJavaObject>("setData", uriObject);string[] mailto = new string[]{"pz789asdf@163.com"};intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_EMAIL"), mailto);            intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_SUBJECT"), "[USERFEED]Android Test Feedback");intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), "We will get your suggestion!");            intentObject.Call<AndroidJavaObject>("setType", "plain/text");            AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");            AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");            AndroidJavaObject chooser = intentClass.CallStatic<AndroidJavaObject>("createChooser", intentObject, "Send your idea!");            currentActivity.Call("startActivity", chooser);yield return new WaitForSeconds(1f);}yield return new WaitUntil(() => isFocus);        isProcessing = false;waitObject.SetActive(false);}}

我自己测试的机器是华为p9,其他的机型还没试过。

下面是实测截图:





另外,如果邮箱你在系统设置好了,会直接打开邮箱,然后创建一个新邮件,填写好你给出的内容。

阅读全文
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 汽车燃油泵坏了怎么办 新车汽油泵坏了怎么办 墓地的树枯死了怎么办 大车尿素不烧了怎么办 不烧尿素限扭怎么办 汽车首保过期了怎么办 假体隆鼻后透光怎么办 熊猫血有抗体了怎么办 rh阴性血怀二胎怎么办 熊猫血怀二胎了怎么办 rh阴性血要二胎怎么办 全血粘度都偏高怎么办 血脂高血粘度高怎么办 全血粘度值1偏高怎么办 全血粘度3偏高怎么办 血粘度高的症状怎么办 粉瘤感染化脓了怎么办 乌药剂量用大了怎么办 水卡消磁了怎么办妙招 电卡消磁了怎么办妙招 入园磁卡消磁了怎么办 透析中静脉压高怎么办 腰间盘突出压迫神经腿疼怎么办 肺热引起的发烧怎么办 肺热引起的痘痘怎么办 冰箱压条的霉点怎么办 白色的布鞋变黄怎么办 白鞋橡胶变黄了怎么办 肝功能检查总胆汁酸高怎么办 吃丹参滴丸尿血怎么办 胰酶消化过久怎么办 抗凝血酶活性低怎么办 抗凝血酶3偏低怎么办 抗凝血酶ⅲ低 怎么办 抗凝血酶3抗原高怎么办 孕32周血压高怎么办 智齿血凝块掉了怎么办 入职体检alt偏高怎么办 剖腹产后crp值高怎么办 超敏c反应蛋白偏高怎么办 孕妇c反应蛋白高怎么办