Search code examples
.netxamarin.androidarcgis-runtime

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


I'm using the .Net runtime sdk (v.100) for Xamarin Android. I'm trying to download tiles as a .tpk for offline use by my mobile app.

I've managed to use the AuthenticationManager to give me a token for my app. I can successfully create the ExportTileCacheTask and create the ExportTileCacheJob by calling ExportTileCache on the ExportTileCacheTask, but the status of the job never seems to change. When I check the job status immediately after the call to ExportTileCache, it is "NotStarted" and the ServerId = "". I have a breakpoint on my ExportJob_JobChanged handler and it never gets hit no matter how long I wait.

Any ideas? Code below:

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();
}

Solution

  • Apparently the tooltip documentation on ExportTileCache is misleading. It does not, in fact, Start and return an ExportTileCacheJob. You must call Start() on the job to start it.

    I finally found java documentation of the class that mentioned this. https://developers.arcgis.com/android/latest/api-reference/reference/com/esri/arcgisruntime/tasks/tilecache/ExportTileCacheJob.html

    After calling Start(), the JobChanged events fired as expected and I was able to successfully download a .tpk file.