暂无描述
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

NGMediaReceiveCallbackiOS.cs 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. #if UNITY_EDITOR || UNITY_IOS
  2. using UnityEngine;
  3. namespace NativeGalleryNamespace
  4. {
  5. public class NGMediaReceiveCallbackiOS : MonoBehaviour
  6. {
  7. private static NGMediaReceiveCallbackiOS instance;
  8. private NativeGallery.MediaPickCallback callback;
  9. private NativeGallery.MediaPickMultipleCallback callbackMultiple;
  10. private float nextBusyCheckTime;
  11. public static bool IsBusy { get; private set; }
  12. [System.Runtime.InteropServices.DllImport( "__Internal" )]
  13. private static extern int _NativeGallery_IsMediaPickerBusy();
  14. public static void Initialize( NativeGallery.MediaPickCallback callback, NativeGallery.MediaPickMultipleCallback callbackMultiple )
  15. {
  16. if( IsBusy )
  17. return;
  18. if( instance == null )
  19. {
  20. instance = new GameObject( "NGMediaReceiveCallbackiOS" ).AddComponent<NGMediaReceiveCallbackiOS>();
  21. DontDestroyOnLoad( instance.gameObject );
  22. }
  23. instance.callback = callback;
  24. instance.callbackMultiple = callbackMultiple;
  25. instance.nextBusyCheckTime = Time.realtimeSinceStartup + 1f;
  26. IsBusy = true;
  27. }
  28. private void Update()
  29. {
  30. if( IsBusy )
  31. {
  32. if( Time.realtimeSinceStartup >= nextBusyCheckTime )
  33. {
  34. nextBusyCheckTime = Time.realtimeSinceStartup + 1f;
  35. if( _NativeGallery_IsMediaPickerBusy() == 0 )
  36. {
  37. IsBusy = false;
  38. NativeGallery.MediaPickCallback _callback = callback;
  39. callback = null;
  40. NativeGallery.MediaPickMultipleCallback _callbackMultiple = callbackMultiple;
  41. callbackMultiple = null;
  42. if( _callback != null )
  43. _callback( null );
  44. if( _callbackMultiple != null )
  45. _callbackMultiple( null );
  46. }
  47. }
  48. }
  49. }
  50. [UnityEngine.Scripting.Preserve]
  51. public void OnMediaReceived( string path )
  52. {
  53. IsBusy = false;
  54. if( string.IsNullOrEmpty( path ) )
  55. path = null;
  56. NativeGallery.MediaPickCallback _callback = callback;
  57. callback = null;
  58. if( _callback != null )
  59. _callback( path );
  60. }
  61. [UnityEngine.Scripting.Preserve]
  62. public void OnMultipleMediaReceived( string paths )
  63. {
  64. IsBusy = false;
  65. string[] _paths = SplitPaths( paths );
  66. if( _paths != null && _paths.Length == 0 )
  67. _paths = null;
  68. NativeGallery.MediaPickMultipleCallback _callbackMultiple = callbackMultiple;
  69. callbackMultiple = null;
  70. if( _callbackMultiple != null )
  71. _callbackMultiple( _paths );
  72. }
  73. private string[] SplitPaths( string paths )
  74. {
  75. string[] result = null;
  76. if( !string.IsNullOrEmpty( paths ) )
  77. {
  78. string[] pathsSplit = paths.Split( '>' );
  79. int validPathCount = 0;
  80. for( int i = 0; i < pathsSplit.Length; i++ )
  81. {
  82. if( !string.IsNullOrEmpty( pathsSplit[i] ) )
  83. validPathCount++;
  84. }
  85. if( validPathCount == 0 )
  86. pathsSplit = new string[0];
  87. else if( validPathCount != pathsSplit.Length )
  88. {
  89. string[] validPaths = new string[validPathCount];
  90. for( int i = 0, j = 0; i < pathsSplit.Length; i++ )
  91. {
  92. if( !string.IsNullOrEmpty( pathsSplit[i] ) )
  93. validPaths[j++] = pathsSplit[i];
  94. }
  95. pathsSplit = validPaths;
  96. }
  97. result = pathsSplit;
  98. }
  99. return result;
  100. }
  101. }
  102. }
  103. #endif