GPSTool.cs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using UnityEngine;
  5. using UnityEngine.Android;
  6. public class GPSTool
  7. {
  8. //GPS获取地址
  9. //成功返回:string[]{国,省,市} (数组中不允许有null)
  10. //失败返回:null
  11. public static void GetAddress(Action<string[]> callback)
  12. {
  13. #if UNITY_ANDROID
  14. Func<string[]> func = delegate ()
  15. {
  16. if (Application.isEditor) return null;
  17. using (var clsU3D = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
  18. using (var objCtx = clsU3D.GetStatic<AndroidJavaObject>("currentActivity"))
  19. using (var objGPSTool = new AndroidJavaClass("com.example.smartbowlib.GPSTool"))
  20. {
  21. string[] address = objGPSTool.CallStatic<string[]>("getAddress", objCtx);
  22. if (address != null)
  23. {
  24. foreach (var item in address)
  25. if (item == null) return null;
  26. }
  27. return address;
  28. }
  29. };
  30. List<string> permissions = new List<string>();
  31. permissions.Add(Permission.CoarseLocation);
  32. permissions.Add(Permission.FineLocation);
  33. for (int i = permissions.Count - 1; i >= 0; i--)
  34. {
  35. if (Permission.HasUserAuthorizedPermission(permissions[i])) permissions.RemoveAt(i);
  36. }
  37. if (permissions.Count > 0)
  38. {
  39. var requestCB = new PermissionCallbacks();
  40. int needPermissionCount = permissions.Count;
  41. requestCB.PermissionGranted += (s) =>
  42. {
  43. Debug.Log("用户同意" + s);
  44. needPermissionCount--;
  45. if (needPermissionCount == 0) callback.Invoke(func.Invoke());
  46. };
  47. requestCB.PermissionDenied += (s) =>
  48. {
  49. Debug.Log("用户拒绝" + s);
  50. };
  51. requestCB.PermissionDeniedAndDontAskAgain += (s) =>
  52. {
  53. Debug.Log("用户拒绝且要求不再询问" + s);
  54. };
  55. Permission.RequestUserPermissions(permissions.ToArray(), requestCB);
  56. }
  57. else
  58. {
  59. callback?.Invoke(func.Invoke());
  60. }
  61. #endif
  62. }
  63. }