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