2016-01-12 159 views
4

我試圖將截屏保存到我的設備的圖像庫。 它工作正常,但不會顯示在畫廊中。Unity將圖像保存到圖庫android/ios

這是我做的

selfie= new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false); 
selfie.ReadPixels(new Rect(0, 0,Screen.width, Screen.height), 0, 0,false); 

selfie.Apply(); 
byte[] bytes = selfie.EncodeToPNG(); 
string filename = "Screenshot.png"; 

fileLocation = Path.Combine(Application.persistentDataPath, filename); 
File.WriteAllBytes(fileLocation, bytes); 

string myFolderLocation = "/mnt/sdcard/DCIM/Camera/"; 
myScreenshotLocation = myFolderLocation + filename; 

System.IO.File.Move(fileLocation, myScreenshotLocation); 

它節省了正確的地方的形象。如果我在SD卡上查看它,它就在那裏。 但在畫廊它沒有出現。所以我在File.move之後試過,刷新了庫。

//REFRESHING THE ANDROID PHONE PHOTO GALLERY IS BEGUN 
    AndroidJavaClass classPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
    AndroidJavaObject objActivity = classPlayer.GetStatic<AndroidJavaObject>("currentActivity");   
    AndroidJavaClass classUri = new AndroidJavaClass("android.net.Uri");   
    AndroidJavaObject objIntent = new AndroidJavaObject("android.content.Intent", new object[2]{"android.intent.action.MEDIA_MOUNTED", classUri.CallStatic<AndroidJavaObject>("parse", "file://" + myScreenshotLocation)});   
    objActivity.Call ("sendBroadcast", objIntent); 
//REFRESHING THE ANDROID PHONE PHOTO GALLERY IS COMPLETE 

但是這沒有做什麼。 我正在使用最新的Unity版本5.3,它應該適用於所有的android和ios設備。任何想法如何讓這個工作,並顯示在畫廊的任何地方?

謝謝!

回答

0

看看最高的答案here

您可能需要修改您的「刷新Android手機照片庫」代碼(您正在測試Android 4.4+,對不對?)。

-1

你的問題看起來像你需要給Android清單中的WRITE_PERMISSIOS_EXTERNAL。

有一個插件用於處理Unity中的Native Gallery,名爲「Native Gallery Assist」,它可以幫助您實現這種功能。我們將其用於社交應用/遊戲中的用戶,以便用戶能夠拍攝他們自己的圖像並相互共享。 (https://www.assetstore.unity3d.com/en/#!/content/60922

在添加寫入權限之前,我們本來就有同樣的問題。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<!--- Thomas: Needed by Native Gallery Assist to be able to save images to the album --> 
2
AndroidJavaClass classPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); 
    AndroidJavaObject objActivity = classPlayer.GetStatic<AndroidJavaObject>("currentActivity"); 
    AndroidJavaClass classMedia = new AndroidJavaClass("android.media.MediaScannerConnection"); 
    classMedia.CallStatic("scanFile", new object[4] { objActivity, 
     new string[] { _path }, 
     new string[] { "image/png" }, 
     null }); 

嘗試上面的代碼,因爲你已經保存的圖像。只需將_path替換爲myScreenshotLocation即可。請注意,這隻適用於上面的Android KitKat 4.4。