2016-12-08 1 views
0

Я сделал простое приложение для андроид устройств, который использует камеру мобильного, чтобы сделать снимок и сохранить его во внутренней папке хранения/шоссе/SDCard/DCIM/Camerizeman/Rerfreshing андроида Фотопленка в Unity3D

Фотографии сохраняются правильно, но проблема, с которой я сталкиваюсь, заключается в том, что я не вижу фотографии из галереи мобильного телефона. Я могу правильно их видеть, если я использую диспетчер файлов или перезагружаю устройство. Я ищу 10 дней, и проблема в том, что я должен обновить галерею после сохранения изображения.

Я не нашёл никакого рабочего решения.

мой код ниже:

RenderTexture renderTex; 
Texture2D screenshot; 
Texture2D LoadScreenshot; 
int width = Screen.width; // for Taking Picture 
int height = Screen.height; // for Taking Picture 
string fileName; 
string myScreenshotLocation; 
string screenShotName = "MyImage_AR_" + System.DateTime.Now.ToString("yyyy-MM-dd-HHmmss") + ".png"; 
public void Snapshot() 
{ 
StartCoroutine (CaptureScreen()); 
} 
public IEnumerator CaptureScreen() 
{ 
yield return null; // Wait till the last possible moment before screen rendering to hide the UI 
//GameObject.FindGameObjectWithTag("Snapshoot").SetActive(false); 
yield return new WaitForEndOfFrame(); // Wait for screen rendering to complete 
if (Screen.orientation == ScreenOrientation.Portrait || Screen.orientation == ScreenOrientation.PortraitUpsideDown) { 
mainCamera = Camera.main.GetComponent<Camera>(); // for Taking Picture 
renderTex = new RenderTexture (width, height, 24); 
mainCamera.targetTexture = renderTex; 
RenderTexture.active = renderTex; 
mainCamera.Render(); 
screenshot = new Texture2D (width, height, TextureFormat.RGB24, false); 
screenshot.ReadPixels (new Rect (0, 0, width, height), 0, 0); 
screenshot.Apply(); //false 
RenderTexture.active = null; 
mainCamera.targetTexture = null; 
} 
if (Screen.orientation == ScreenOrientation.LandscapeLeft || Screen.orientation == ScreenOrientation.LandscapeRight) { 
mainCamera = Camera.main.GetComponent<Camera>(); // for Taking Picture 
renderTex = new RenderTexture (height, width, 24); 
mainCamera.targetTexture = renderTex; 
RenderTexture.active = renderTex; 
mainCamera.Render(); 
screenshot = new Texture2D (height, width, TextureFormat.RGB24, false); 
screenshot.ReadPixels (new Rect (0, 0, height, width), 0, 0); 
screenshot.Apply(); //false 
RenderTexture.active = null; 
mainCamera.targetTexture = null; 
} 
myScreenshotLocation = myFolderLocation + screenShotName; 
File.WriteAllBytes (myFolderLocation + screenShotName, screenshot.EncodeToPNG()); 
} 

Пожалуйста, помогите!

ответ

1

Использование MediaScannerConnection. Вам понадобится изображение, отсканированное в галерее.

Native Java код выходит что-то вроде:

MediaScannerConnection.scanFile(unityPlayerActivity, new String[]{externalImagePath}, null, null); 

может создать плагин - Unity Android plugin tutorial (1/3) Fundamentals - или использовать AndroidJavaClass.CallStatic для вызова MediaScannerConnection.scanFile.

+0

Конечно @Geri ... спасибо вам спасибо .. я буду appriciate вашей помощи! –

+0

вы можете создать частный чат здесь, чтобы мы могли поговорить с Джери? –

+0

.. :-(Мне нужно 20 репутации в чате ... любое письмо, чтобы отправить вам мой fb acc? –

2

Второй рабочий раствор:

using (AndroidJavaClass jcUnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) 
     using (AndroidJavaObject joActivity = jcUnityPlayer.GetStatic<AndroidJavaObject>("currentActivity")) 
     using (AndroidJavaObject joContext = joActivity.Call<AndroidJavaObject>("getApplicationContext")) 
     using (AndroidJavaClass jcMediaScannerConnection = new AndroidJavaClass("android.media.MediaScannerConnection")) 
     using (AndroidJavaClass jcEnvironment = new AndroidJavaClass("android.os.Environment")) 
     using (AndroidJavaObject joExDir = jcEnvironment.CallStatic<AndroidJavaObject>("getExternalStorageDirectory")) 
     { 
      jcMediaScannerConnection.CallStatic("scanFile", joContext, new string[] { YOURFULL IMAGE PATH}, null, null); 
     } 
+1

Я был в процессе отправки своего ответа. – Programmer