GPSTool.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. #if UNITY_ANDROID
  13. Func<string[]> func = delegate() {
  14. using (var clsU3D = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
  15. using (var objCtx = clsU3D.GetStatic<AndroidJavaObject>("currentActivity"))
  16. using (var objGPSTool = new AndroidJavaClass("com.example.smartbowlib.GPSTool"))
  17. {
  18. string[] address = objGPSTool.CallStatic<string[]>("getAddress", objCtx);
  19. if (address != null) {
  20. foreach (var item in address)
  21. if (item == null) return null;
  22. }
  23. return address;
  24. }
  25. };
  26. List<string> permissions = new List<string>();
  27. permissions.Add(Permission.CoarseLocation);
  28. permissions.Add(Permission.FineLocation);
  29. for (int i = permissions.Count - 1; i >= 0; i--) {
  30. if (Permission.HasUserAuthorizedPermission(permissions[i])) permissions.RemoveAt(i);
  31. }
  32. if (permissions.Count > 0) {
  33. var requestCB = new PermissionCallbacks();
  34. int needPermissionCount = permissions.Count;
  35. requestCB.PermissionGranted += (s) => {
  36. Debug.Log("用户同意" + s);
  37. needPermissionCount--;
  38. if (needPermissionCount == 0) callback.Invoke(func.Invoke());
  39. };
  40. requestCB.PermissionDenied += (s) => {
  41. Debug.Log("用户拒绝" + s);
  42. };
  43. requestCB.PermissionDeniedAndDontAskAgain += (s) => {
  44. Debug.Log("用户拒绝且要求不再询问" + s);
  45. };
  46. Permission.RequestUserPermissions(permissions.ToArray(), requestCB);
  47. } else {
  48. callback?.Invoke(func.Invoke());
  49. }
  50. #endif
  51. }
  52. }