using System; using AVFoundation; using com.hdl.on; using CoreLocation; using Foundation; using UIKit; namespace Shared { public class BaseApplicationDelegateForHdlOn : UIApplicationDelegate { public static Action FinishedLaunchingAction; public static Action OnResignActivationAction; public static Action DidEnterBackgroundAction; public static Action WillEnterForegroundAction; public static Action OnActivatedAction; public static Action WillTerminateAction; public static Action DeviceTokenAction; public override bool FinishedLaunching (UIApplication application, NSDictionary launchOptions) { registerForRemoteNotification (application); var musicInfo = new MusicInfo { }; Volume.Init (); locate (); FinishedLaunchingAction?.Invoke (application, launchOptions); return true; } /// /// 注册远程消息推送 /// /// Application. void registerForRemoteNotification (UIApplication application) { if (8 <= int.Parse (UIDevice.CurrentDevice.SystemVersion.Split ('.') [0])) { // 1.注册UserNotification,以获取推送通知的权限 var settings = UIUserNotificationSettings.GetSettingsForTypes (UIUserNotificationType.Sound | UIUserNotificationType.Alert | UIUserNotificationType.Badge, null); application.RegisterUserNotificationSettings (settings); // 2.注册远程推送 application.RegisterForRemoteNotifications (); } else { application.RegisterForRemoteNotificationTypes (UIRemoteNotificationType.NewsstandContentAvailability | UIRemoteNotificationType.Alert | UIRemoteNotificationType.Badge | UIRemoteNotificationType.Sound); } } #region GPS 定位 // 判断定位操作是否被允许 CLLocationManager locationManager; void locate () { //if (CLLocationManager.LocationServicesEnabled) { //定位初始化 locationManager = new CLLocationManager (); //设置定位精度 locationManager.DesiredAccuracy = 100; //设置是否允许系统自动暂停定位 locationManager.PausesLocationUpdatesAutomatically = false; //设置定位更新的最小距离 locationManager.DistanceFilter = 10; locationManager.LocationsUpdated += (sender, e) => { var location = e.Locations [e.Locations.Length - 1]; Shared.Application.LocationAction?.Invoke (location.Coordinate.Longitude, location.Coordinate.Latitude); }; if (8 <= int.Parse (UIDevice.CurrentDevice.SystemVersion.Split ('.') [0])) { //定位管理者需要一直请求定位服务 locationManager.RequestWhenInUseAuthorization (); } //if (9 <= int.Parse(UIDevice.CurrentDevice.SystemVersion.Split('.')[0])) //{ // //需要允许后台更新数据更新 // //locationManager.AllowsBackgroundLocationUpdates = true; // locationManager.RequestAlwaysAuthorization(); //} locationManager.StartUpdatingLocation ();//开启定位 } } #endregion public override void OnResignActivation (UIApplication application) => OnResignActivationAction?.Invoke (application);// Invoked when the application is about to move from active to inactive state.// This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) // or when the user quits the application and it begins the transition to the background state.// Games should use this method to pause the game. public override void DidEnterBackground (UIApplication application) => DidEnterBackgroundAction?.Invoke (application);// Use this method to release shared resources, save user data, invalidate timers and store the application state.// If your application supports background exection this method is called instead of WillTerminate when the user quits. public override void WillEnterForeground (UIApplication application) => WillEnterForegroundAction?.Invoke (application);// Called as part of the transiton from background to active state.// Here you can undo many of the changes made on entering the background. public override void OnActivated (UIApplication application) { AVAudioSession.SharedInstance ().SetActive (true); OnActivatedAction?.Invoke (application); // Restart any tasks that were paused (or not yet started) while the application was inactive. // If the application was previously in the background, optionally refresh the user interface. } public override void WillTerminate (UIApplication application) => WillTerminateAction?.Invoke (application);// Called when the application is about to terminate. Save data, if needed. See also DidEnterBackground. /// /// 注册远程消息推送回调方法 /// /// Application. /// Device token. public override void RegisteredForRemoteNotifications (UIApplication application, NSData deviceToken) { var deviceTokenDescription = deviceToken.Description; if (!string.IsNullOrWhiteSpace (deviceTokenDescription)) { deviceTokenDescription = deviceTokenDescription.Trim ('<').Trim ('>').Replace (" ", ""); Shared.HDLUtils.WriteLine ($"DeviceToken:{deviceTokenDescription}"); } // Get previous device token var oldDeviceTokenDescription = NSUserDefaults.StandardUserDefaults.StringForKey ("PushDeviceToken"); // Has the token changed? if (oldDeviceTokenDescription != deviceTokenDescription) { // Save new device token NSUserDefaults.StandardUserDefaults.SetString (deviceTokenDescription, "PushDeviceToken"); } DeviceTokenAction?.Invoke (deviceTokenDescription); } } }