如何在应用程序处于后台时创建UIBackgroundTask来发送数据?

时间:2017-07-17 22:07:51

标签: ios delphi firemonkey

我在德尔福柏林下。我的应用程序在后台监听位置更新。当他们在后台更新位置时我需要将数据发送到服务器,但是当我在互联网上阅读时,我需要在UIBackgroundTask内进行此操作,否则应用将在后台再次输入数据实际发送。知道怎么在delphi下做这个吗?

1 个答案:

答案 0 :(得分:1)

这里有一些代码可以帮助您入门:

uses
  Macapi.ObjectiveC, iOSapi.Foundation, iOSapi.CocoaTypes, iOSapi.UIKit;

const
  UIKitFwk: string = '/System/Library/Frameworks/UIKit.framework/UIKit';

type
  TBackgroundTaskHandler = procedure of object;

  // Fills in methods missing in Delphi
  UIApplication = interface(UIResponder)
    ['{8237272B-1EA5-4D77-AC35-58FB22569953}']
    function beginBackgroundTaskWithExpirationHandler(handler: TBackgroundTaskHandler): UIBackgroundTaskIdentifier; cdecl;
    procedure endBackgroundTask(identifier: UIBackgroundTaskIdentifier); cdecl;
  end;
  TUIApplication = class(TOCGenericImport<UIApplicationClass, UIApplication>)  end;

function SharedApplication: UIApplication;
begin
  Result := TUIApplication.Wrap(TUIApplication.OCClass.sharedApplication);
end;

function UIBackgroundTaskInvalid: UIBackgroundTaskIdentifier;
begin
  Result := CocoaIntegerConst(UIKitFwk, 'UIBackgroundTaskInvalid');
end;

当您的应用收到位置更新时,您可以拨打电话:

TaskID := SharedApplication.beginBackgroundTaskWithExpirationHandler(DoExpiry);

DoExpiry是一种您定义的方法,用于在操作系统指示您的任务时间已过期时进行处理。检查UIBackgroundTaskInvalid的结果。

任务完成后,请致电:

SharedApplication.endBackgroundTask(TaskID);