2016-04-09 39 views
0

Oyuncunun ölümünden sonra oyunumda ekran görüntüsünü yakaladım. Ekran görüntüsünü yakalamak için kodu takip ediyorum.Unity Game'den Android Uygulamasıyla Paylaş Paylaş

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); 

Aşağıdaki kodu kullanarak ekran görüntüsünü kaydediyorum.

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; 

Şimdi, bu resmi Android uygulamasında paylaşmak istiyorum. Araştırmalarıma göre, bunun için aşağıdaki kodu aldım, ancak boş görüntüyü döndürüyor.

//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); 

Bu konuda neyi değiştirmeliyim? Lütfen yardım edin. Teşekkürler.

+0

sen benim cevap denedin mi? – Programmer

+0

Evet, Ama yine de bir sorun var. Düz metin ve görüntüyü birlikte paylaşamıyorum. Ben setType ile ilgili bir sorun olduğunu düşünüyorum. –

+0

Yayınınız resim ile ilgilidir. Bunun için başka bir soru oluşturabilirsiniz. – Programmer

cevap

3

Ekran görüntüsünü almak için takeScreenShotAndShare() numaralı telefonu arayın ve paylaşın. Paylaşmak istediğiniz resme sahipseniz, StartCoroutine(shareScreenshot(path)); numaralı telefonu arayın ve görüntünün yolunu/yerini girin. Bu sadece png görüntülerini destekler. jpeg, değiştirmek paylaşmak için

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

için

intentObject.Call<AndroidJavaObject>("setType", "image/jpeg"); 

bütün kodu:

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; 
    }