BridgeAndroid.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System;
  2. using UnityEngine;
  3. using TapSDK.Core.Internal.Log;
  4. namespace TapSDK.Core
  5. {
  6. public class BridgeAndroid : IBridge
  7. {
  8. private string bridgeJavaClz = "com.taptap.sdk.kit.internal.enginebridge.EngineBridge";
  9. private string instanceField = "INSTANCE";
  10. private string registerHandlerMethod = "registerHandler";
  11. private string callHandlerMethod = "execCommand";
  12. private string callHandlerAsyncMethod = "execCommandAsync";
  13. private string initMethod = "init";
  14. private string registerMethod = "registerService";
  15. private readonly AndroidJavaObject _mAndroidBridge;
  16. private static readonly BridgeAndroid SInstance = new BridgeAndroid();
  17. public static BridgeAndroid GetInstance()
  18. {
  19. return SInstance;
  20. }
  21. private BridgeAndroid()
  22. {
  23. var mCurrentActivity =
  24. new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
  25. _mAndroidBridge = new AndroidJavaClass(bridgeJavaClz).GetStatic<AndroidJavaObject>(instanceField);
  26. _mAndroidBridge.Call(initMethod, mCurrentActivity);
  27. }
  28. public void Register(string serviceClzName, string serviceImplName)
  29. {
  30. if (_mAndroidBridge == null)
  31. {
  32. return;
  33. }
  34. try
  35. {
  36. var serviceClass = new AndroidJavaClass(serviceClzName);
  37. var serviceImpl = new AndroidJavaObject(serviceImplName);
  38. _mAndroidBridge.Call(registerMethod, serviceClass, serviceImpl);
  39. }
  40. catch (Exception e)
  41. {
  42. TapLog.Log("register Failed:" + e);
  43. //
  44. }
  45. }
  46. public void Call(Command command, Action<Result> action)
  47. {
  48. _mAndroidBridge?.Call(callHandlerMethod, command.ToJSON(), new BridgeCallback(action));
  49. }
  50. public void Call(Command command)
  51. {
  52. _mAndroidBridge?.Call(callHandlerMethod, command.ToJSON(), null);
  53. }
  54. public string CallWithReturnValue(Command command, Action<Result> action)
  55. {
  56. return _mAndroidBridge?.Call<string>(callHandlerAsyncMethod, command.ToJSON());
  57. }
  58. }
  59. }