如何使用 ArcGIS .net runtime sdk 正确设置 ExportTileCacheJob

How to properly setup an ExportTileCacheJob using ArcGIS .net runtime sdk

我正在使用 Xamarin Android 的 .Net 运行时 sdk (v.100)。我正在尝试将图块下载为 .tpk 供我的移动应用程序离线使用。

我已经设法使用 AuthenticationManager 为我的应用程序提供了一个令牌。我可以成功创建 ExportTileCacheTask 并通过调用 ExportTileCacheTask 上的 ExportTileCache 创建 ExportTileCacheJob,但作业的状态似乎永远不会改变。当我在调用 ExportTileCache 后立即检查作业状态时,它是 "NotStarted" 和 ServerId = ""。我的 ExportJob_JobChanged 处理程序上有一个断点,无论我等多久它都不会被击中。

有什么想法吗?代码如下:

var serviceUri = new Uri("https://tiledbasemaps.arcgis.com/arcgis/rest/services/World_Imagery/MapServer");
var tokenUri = new Uri("https://www.arcgis.com/sharing/rest");
try
{
    var serverInfo = new ServerInfo
    {
        ServerUri = tokenUri,
        TokenAuthenticationType = TokenAuthenticationType.OAuthClientCredentials,
        OAuthClientInfo = new OAuthClientInfo { ClientId = MYCLIENTID, ClientSecret = MYCLIENTSECRET) },
    };
    AuthenticationManager.Current.RegisterServer(serverInfo);

    var cred = await AuthenticationManager.Current.GenerateCredentialAsync(tokenUri, new GenerateTokenOptions { });

    var exportTask = await ExportTileCacheTask.CreateAsync(serviceUri, cred);


    var exportParams = await exportTask.CreateDefaultExportTileCacheParametersAsync(aoi, 50000, 10000);

    job = exportTask.ExportTileCache(exportParams, localFilePath);
    job.JobChanged += ExportJob_JobChanged;
}
catch (Exception e)
{
    e.ToString();
}

显然,关于 ExportTileCache 的工具提示文档具有误导性。事实上,它不是 Start 和 return ExportTileCacheJob。您必须在作业上调用 Start() 才能启动它。

我终于找到了 class 的 java 文档,其中提到了这一点。 https://developers.arcgis.com/android/latest/api-reference/reference/com/esri/arcgisruntime/tasks/tilecache/ExportTileCacheJob.html

调用 Start() 后,JobChanged 事件按预期触发,我能够成功下载 .tpk 文件。