在Unity Game的Android应用程序上共享图像

在Unity Game的Android应用程序上共享图像,android,unity3d,screenshot,Android,Unity3d,Screenshot,我在游戏中捕捉到了玩家死亡时的截图。我有以下代码来捕获屏幕截图 RenderTexture rt = new RenderTexture (800, 600, 24); MainCamera.targetTexture = rt; Texture2D texture = new Texture2D (800, 600, TextureFormat.RGB24, false); MainCamera.Render (); RenderTexture.active =

我在游戏中捕捉到了玩家死亡时的截图。我有以下代码来捕获屏幕截图

RenderTexture rt = new RenderTexture (800, 600, 24);
    MainCamera.targetTexture = rt;
    Texture2D texture = new Texture2D (800, 600, TextureFormat.RGB24, false);
    MainCamera.Render ();
    RenderTexture.active = rt;
    texture.ReadPixels (new Rect (0, 0, 800, 600), 0, 0);
    MainCamera.targetTexture = null;
    RenderTexture.active = null;
    Destroy (rt);
    byte[] bytes = texture.EncodeToPNG ();
    Directory.CreateDirectory (Application.persistentDataPath + "/GameOverScreenShot");
    File.WriteAllBytes (Application.persistentDataPath + "/GameOverScreenShot" + "/DiedScreenShot.png", bytes);
我正在使用以下代码保存屏幕截图

byte[] bytes = File.ReadAllBytes (Application.persistentDataPath +"/GameOverScreenShot" + "/BirdDiedScreenShot.png");

Texture2D texture = new Texture2D (800, 600, TextureFormat.RGB24, false);
RectOffset tempOffset = new RectOffset (5, 5, 5, 5);
texture.filterMode = FilterMode.Trilinear;
texture.LoadImage (bytes);
Sprite sprite = Sprite.Create (texture, new Rect (0, 0, 800, 400), new Vector2 (0.5f, 0.0f), 2.0f);
ScreenShot_Image.GetComponent<Image> ().sprite = sprite;
byte[]bytes=File.ReadAllBytes(Application.persistentDataPath+“/GameOverScreenShot”+“/BirdDiedScreenShot.png”);
Texture2D纹理=新的Texture2D(800600,TextureFormat.RGB24,false);
RectOffset tempOffset=新的RectOffset(5,5,5,5);
texture.filterMode=filterMode.Trilinear;
texture.LoadImage(字节);
Sprite Sprite=Sprite.Create(纹理,新矩形(0,0,800,400),新矢量2(0.5f,0.0f),2.0f);
屏幕截图_Image.GetComponent().sprite=sprite;
现在,我想在android应用程序上分享这个屏幕截图。根据我的研究,我有以下代码,但它返回空白图像

//instantiate the class Intent
AndroidJavaClass intentClass = new AndroidJavaClass("android.content.Intent");

//instantiate the object Intent
AndroidJavaObject intentObject = new AndroidJavaObject("android.content.Intent");

//call setAction setting ACTION_SEND as parameter
intentObject.Call<AndroidJavaObject>("setAction", intentClass.GetStatic<string>("ACTION_SEND"));

//instantiate the class Uri
AndroidJavaClass uriClass = new AndroidJavaClass("android.net.Uri");

//instantiate the object Uri with the parse of the url's file
string destination = Application.persistentDataPath + "/GameOverScreenShot" + "/DiedScreenShot.png";
AndroidJavaObject uriObject = uriClass.CallStatic<AndroidJavaObject>("parse","file://"+destination);

//call putExtra with the uri object of the file
intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject);

//set the type of file
intentObject.Call<AndroidJavaObject>("setType", "image/*");

//instantiate the class UnityPlayer
AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

//instantiate the object currentActivity
AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");

//call the activity with our Intent
currentActivity.Call("startActivity", intentObject);
//实例化类意图
AndroidJavaClass intentClass=新的AndroidJavaClass(“android.content.Intent”);
//实例化对象意图
AndroidJavaObject intentObject=新的AndroidJavaObject(“android.content.Intent”);
//调用setAction设置动作\u发送为参数
intentObject.Call(“setAction”,intentClass.GetStatic(“ACTION_SEND”);
//实例化类Uri
AndroidJavaClass uriClass=新的AndroidJavaClass(“android.net.Uri”);
//使用url文件的解析实例化对象Uri
字符串destination=Application.persistentDataPath+“/GameOverScreenShot”+“/DiedScreenShot.png”;
AndroidJavaObject uriObject=uriClass.CallStatic(“解析”,“文件:/”+目的地”);
//使用文件的uri对象调用putExtra
intentObject.Call(“putExtra”,intentClass.GetStatic(“EXTRA_流”),uriObject);
//设置文件的类型
intentObject.Call(“setType”、“image/*”);
//实例化类UnityPlayer
AndroidJavaClass unity=新的AndroidJavaClass(“com.unity3d.player.UnityPlayer”);
//实例化对象currentActivity
AndroidJavaObject currentActivity=unity.GetStatic(“currentActivity”);
//把我们的意图称为活动
调用(“startActivity”,intentObject);

我应该在这方面做些什么改变??请提供帮助,提前感谢

只需致电
拍摄屏幕快照并分享()
即可拍摄屏幕快照并分享。如果你已经有了想要分享的图片,只需调用
startcroutine(shareScreenshot(path))并传入图像的路径/位置。这只支持png图像。要共享jpeg,请更改

intentObject.Call<AndroidJavaObject>("setType", "image/png");
intentObject.Call(“setType”、“image/png”);

intentObject.Call(“setType”、“image/jpeg”);
整个代码:

void takeScreenShotAndShare()
{
    StartCoroutine(takeScreenshotAndSave());
}

private IEnumerator takeScreenshotAndSave()
{
    string path = "";
    yield return new WaitForEndOfFrame();

    Texture2D screenImage = new Texture2D(Screen.width, Screen.height);

    //Get Image from screen
    screenImage.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
    screenImage.Apply();

    //Convert to png
    byte[] imageBytes = screenImage.EncodeToPNG();


    System.IO.Directory.CreateDirectory(Application.persistentDataPath + "/GameOverScreenShot");
    path = Application.persistentDataPath + "/GameOverScreenShot" + "/DiedScreenShot.png";
    System.IO.File.WriteAllBytes(path, imageBytes);

    StartCoroutine(shareScreenshot(path));
}

private IEnumerator shareScreenshot(string destination)
{
    string ShareSubject = "Picture Share";
    string shareLink = "Test Link" + "\nhttp://stackoverflow.com/questions/36512784/share-image-on-android-application-from-unity-game";
    string textToShare = "Text To share";

    Debug.Log(destination);


    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"), textToShare + shareLink);
        intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_SUBJECT"), ShareSubject);
        intentObject.Call<AndroidJavaObject>("setType", "image/png");
        AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");
        currentActivity.Call("startActivity", intentObject);
    }
    yield return null;
}
void take屏幕快照和共享()
{
开始例行程序(takescreenshot和save());
}
私有IEnumerator拍摄屏幕快照并保存()
{
字符串路径=”;
返回新的WaitForEndOfFrame();
Texture2D screenImage=新的Texture2D(屏幕宽度、屏幕高度);
//从屏幕上获取图像
screenImage.ReadPixels(新的矩形(0,0,Screen.width,Screen.height),0,0);
screenImage.Apply();
//转换为png
byte[]imageBytes=screenImage.EncodeToPNG();
System.IO.Directory.CreateDirectory(Application.persistentDataPath+“/GameOverScreenShot”);
path=Application.persistentDataPath+“/GameOverScreenShot”+“/DiedScreenShot.png”;
System.IO.File.writealBytes(路径,imageBytes);
开始例行程序(共享屏幕截图(路径));
}
私有IEnumerator共享屏幕截图(字符串目标)
{
字符串ShareSubject=“图片共享”;
字符串shareLink=“测试链接”+”\nhttp://stackoverflow.com/questions/36512784/share-image-on-android-application-from-unity-game";
string textToShare=“要共享的文本”;
Debug.Log(目的地);
if(!Application.isEditor)
{
AndroidJavaClass intentClass=新的AndroidJavaClass(“android.content.Intent”);
AndroidJavaObject intentObject=新的AndroidJavaObject(“android.content.Intent”);
intentObject.Call(“setAction”,intentClass.GetStatic(“ACTION_SEND”);
AndroidJavaClass uriClass=新的AndroidJavaClass(“android.net.Uri”);
AndroidJavaObject uriObject=uriClass.CallStatic(“解析”,“文件:/”+目的地”);
intentObject.Call(“putExtra”,intentClass.GetStatic(“EXTRA_流”),uriObject);
intentObject.Call(“putExtra”,intentClass.GetStatic(“EXTRA_TEXT”),textToShare+shareLink);
intentObject.Call(“putExtra”,intentClass.GetStatic(“EXTRA_SUBJECT”),ShareSubject);
intentObject.Call(“setType”、“image/png”);
AndroidJavaClass unity=新的AndroidJavaClass(“com.unity3d.player.UnityPlayer”);
AndroidJavaObject currentActivity=unity.GetStatic(“currentActivity”);
调用(“startActivity”,intentObject);
}
收益返回空;
}

只需调用
takescreenshot和share()
即可拍摄屏幕快照并共享。如果你已经有了想要分享的图片,只需调用
startcroutine(shareScreenshot(path))并传入图像的路径/位置。这只支持png图像。要共享jpeg,请更改

intentObject.Call<AndroidJavaObject>("setType", "image/png");
intentObject.Call(“setType”、“image/png”);

intentObject.Call(“setType”、“image/jpeg”);
整个代码:

void takeScreenShotAndShare()
{
    StartCoroutine(takeScreenshotAndSave());
}

private IEnumerator takeScreenshotAndSave()
{
    string path = "";
    yield return new WaitForEndOfFrame();

    Texture2D screenImage = new Texture2D(Screen.width, Screen.height);

    //Get Image from screen
    screenImage.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
    screenImage.Apply();

    //Convert to png
    byte[] imageBytes = screenImage.EncodeToPNG();


    System.IO.Directory.CreateDirectory(Application.persistentDataPath + "/GameOverScreenShot");
    path = Application.persistentDataPath + "/GameOverScreenShot" + "/DiedScreenShot.png";
    System.IO.File.WriteAllBytes(path, imageBytes);

    StartCoroutine(shareScreenshot(path));
}

private IEnumerator shareScreenshot(string destination)
{
    string ShareSubject = "Picture Share";
    string shareLink = "Test Link" + "\nhttp://stackoverflow.com/questions/36512784/share-image-on-android-application-from-unity-game";
    string textToShare = "Text To share";

    Debug.Log(destination);


    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"), textToShare + shareLink);
        intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_SUBJECT"), ShareSubject);
        intentObject.Call<AndroidJavaObject>("setType", "image/png");
        AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");
        currentActivity.Call("startActivity", intentObject);
    }
    yield return null;
}
void take屏幕快照和共享()
{
开始例行程序(takescreenshot和save());
}
私有IEnumerator拍摄屏幕快照并保存()
{
字符串路径=”;
返回新的WaitForEndOfFrame();
Texture2D screenImage=新的Texture2D(屏幕宽度、屏幕高度);
//从屏幕上获取图像
screenImage.ReadPixels(新的矩形(0,0,Screen.width,Screen.height),0,0);
screenImage.Apply();
//转换为png
byte[]imageBytes=screenImage.EncodeToPNG();
System.IO.Directory.CreateDirectory(Application.persistentDataPath+“/GameOverScreenShot”);
path=Application.persistentDataPath+“/GameOverScreenShot”+“/DiedScreenShot.png”;
System.IO.File.writealBytes(路径,imageBytes);
开始例行程序(共享屏幕截图(路径));
}
私人股本