2015-08-25 63 views
1

我最近在Play商店發佈了一款遊戲。在遊戲中有一個分享按鈕,使用來自資產的促銷圖片,使用Android本地分享實用程序添加一些文字和分享。我知道FB不允許用戶輸入文字,但圖像總是無法添加到文章中。Unity Android - 圖片分享到Facebook失敗

我已經在這個問題上打了很多天了。我安裝了Facebook SDK,這本身並沒有解決問題,但我不知道如何繼續按下按鈕來允許用戶選擇共享時使用哪種服務,而不是僅使用Facebook sdk共享。

下面是我使用的代碼:

yield return new WaitForEndOfFrame(); 
    if (!Application.isEditor) 
    { 
     string fromPath = "jar:file://" + Application.dataPath + "!/assets/"; 
     string toPath = Application.persistentDataPath + "/"; 

     string[] filesNamesToCopy = new string[] { "a.txt", "b.txt" }; 
     foreach (string fileName in filesNamesToCopy) 
     { 
      Debug.Log("copying from " + fromPath + fileName + " to " + toPath); 
      WWW www1 = new WWW(fromPath + fileName); 
      yield return www1; 
      Debug.Log("yield done"); 
      File.WriteAllBytes(toPath + fileName, www1.bytes); 
      Debug.Log("file copy done"); 
     } 
     // code to open the image and share it 
     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", "jar:file://" + Application.dataPath + "!/assets/" + "Promo.jpg"); 
     intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_STREAM"), uriObject); 

     intentObject.Call<AndroidJavaObject>("setType", "text/plain"); 
     intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_TEXT"), "I scored " + score + " in Space Drill, try to beat me! #spacedrill https://play.google.com/store/apps/details?id=com.AbsinthePie.space_drill"); 
     intentObject.Call<AndroidJavaObject>("putExtra", intentClass.GetStatic<string>("EXTRA_SUBJECT"), "SUBJECT"); 

     intentObject.Call<AndroidJavaObject>("setType", "image/jpeg"); 
     AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
     AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity"); 

     currentActivity.Call("startActivity", intentObject); 
    } 

任何提示或建議將不勝感激。 感謝您的閱讀!

+0

您不使用Facebook SDK團結有什麼特別的理由這樣做?他們有一個功能,可以讓你在分享時從本地存儲中添加圖片 –

回答

0

試試這個:

Texture2D tex=new Texture2D(width,height,TextureFormat.RGB24,false); 
     tex.ReadPixels(new Rect(startX,startY,width,height),0,0); 

     tex.Apply(); 

     byte[] dataToSave = tex.EncodeToPNG(); 
     grab = false; 
     string destination = Path.Combine(Application.persistentDataPath,System.DateTime.Now.ToString("yyyy-MM-dd-HHmmss") + ".png"); 
     File.WriteAllBytes(destination, dataToSave); 

      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"), message); 

      intentObject.Call<AndroidJavaObject>("setType", "image/jpeg"); 
      AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
      AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity"); 

      // option one WITHOUT chooser: 
      currentActivity.Call("startActivity", intentObject); 
+0

謝謝,像魅力一樣工作。當然編輯了一下。 –