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
- Unity3D-调用Android系统邮件发送邮件,或调用系统分享去分享内容
- Android开发-调用系统自带软件发送邮件或分享文字-常用操作
- iOS-调用系统的短信和发送邮件功能,实现短信分享邮件分享
- iOS-调用系统的短信和发送邮件功能,实现短信分享邮件分享
- iOS-调用系统的短信和发送邮件功能,实现短信分享邮件分享
- iOS-调用系统的短信和发送邮件功能,实现短信分享邮件分享
- iOS-调用系统的短信和发送邮件功能,实现短信分享邮件分享
- 小胖说事8------iOS 调用系统的短信和发送邮件功能,实现短信分享邮件分享
- iOS-调用系统的短信和发送邮件功能,实现短信分享邮件分享
- Android 调用系统邮件程序发送邮件
- 调用android系统邮件发送邮件
- 调用系统邮件 配置邮件内容 发送邮件
- iOS 调用系统短信,邮件分享
- android调用非系统系统邮件发送
- Android之调用系统Email发送邮件
- android调用系统邮件发送图片文本
- Android调用系统Email发送邮件
- android调用系统的分享功能实现分享到短信,邮件和其他
- Android 监听手机键盘打开和关闭状态
- Google-C++-style-headerfile
- JSON
- Centos服务器安全配置SSH使用Google Authenticator二次验证
- 判断网络是否可用
- Unity3D-调用Android系统邮件发送邮件,或调用系统分享去分享内容
- SEM概括
- 集合——练习1
- 送给前端的你,推荐几篇前端汇总文章。(来自知乎专栏)
- 树莓派安装wiringPi库
- Hibernate监听用户操作日志
- 图像按钮ImageButton
- CSS3动画 Transitions, Transforms和Animation使用简介
- 深度学习-神经网络