123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- #if UNITY_EDITOR || UNITY_IOS
- using UnityEngine;
- namespace NativeGalleryNamespace
- {
- public class NGMediaReceiveCallbackiOS : MonoBehaviour
- {
- private static NGMediaReceiveCallbackiOS instance;
- private NativeGallery.MediaPickCallback callback;
- private NativeGallery.MediaPickMultipleCallback callbackMultiple;
- private float nextBusyCheckTime;
- public static bool IsBusy { get; private set; }
- [System.Runtime.InteropServices.DllImport( "__Internal" )]
- private static extern int _NativeGallery_IsMediaPickerBusy();
- public static void Initialize( NativeGallery.MediaPickCallback callback, NativeGallery.MediaPickMultipleCallback callbackMultiple )
- {
- if( IsBusy )
- return;
- if( instance == null )
- {
- instance = new GameObject( "NGMediaReceiveCallbackiOS" ).AddComponent<NGMediaReceiveCallbackiOS>();
- DontDestroyOnLoad( instance.gameObject );
- }
- instance.callback = callback;
- instance.callbackMultiple = callbackMultiple;
- instance.nextBusyCheckTime = Time.realtimeSinceStartup + 1f;
- IsBusy = true;
- }
- private void Update()
- {
- if( IsBusy )
- {
- if( Time.realtimeSinceStartup >= nextBusyCheckTime )
- {
- nextBusyCheckTime = Time.realtimeSinceStartup + 1f;
- if( _NativeGallery_IsMediaPickerBusy() == 0 )
- {
- IsBusy = false;
- NativeGallery.MediaPickCallback _callback = callback;
- callback = null;
- NativeGallery.MediaPickMultipleCallback _callbackMultiple = callbackMultiple;
- callbackMultiple = null;
- if( _callback != null )
- _callback( null );
- if( _callbackMultiple != null )
- _callbackMultiple( null );
- }
- }
- }
- }
- public void OnMediaReceived( string path )
- {
- IsBusy = false;
- if( string.IsNullOrEmpty( path ) )
- path = null;
- NativeGallery.MediaPickCallback _callback = callback;
- callback = null;
- if( _callback != null )
- _callback( path );
- }
- public void OnMultipleMediaReceived( string paths )
- {
- IsBusy = false;
- string[] _paths = SplitPaths( paths );
- if( _paths != null && _paths.Length == 0 )
- _paths = null;
- NativeGallery.MediaPickMultipleCallback _callbackMultiple = callbackMultiple;
- callbackMultiple = null;
- if( _callbackMultiple != null )
- _callbackMultiple( _paths );
- }
- private string[] SplitPaths( string paths )
- {
- string[] result = null;
- if( !string.IsNullOrEmpty( paths ) )
- {
- string[] pathsSplit = paths.Split( '>' );
- int validPathCount = 0;
- for( int i = 0; i < pathsSplit.Length; i++ )
- {
- if( !string.IsNullOrEmpty( pathsSplit[i] ) )
- validPathCount++;
- }
- if( validPathCount == 0 )
- pathsSplit = new string[0];
- else if( validPathCount != pathsSplit.Length )
- {
- string[] validPaths = new string[validPathCount];
- for( int i = 0, j = 0; i < pathsSplit.Length; i++ )
- {
- if( !string.IsNullOrEmpty( pathsSplit[i] ) )
- validPaths[j++] = pathsSplit[i];
- }
- pathsSplit = validPaths;
- }
- result = pathsSplit;
- }
- return result;
- }
- }
- }
- #endif
|