Das funktioniert bereits. Enroute akzeptiert im Prinzip beliebige Rastergraphiken mit den entsprechenden Dateinamen. Die Sache hat aber einen Haken: einige Versionen von Android (und wahrscheinlich auch iOS) verschleiern die Dateinamen aus Gründen des Datenschutzes. Statt eines Dateinamens erhält die App dann nur eine "Content-URL", was im wesentlichen "content://zufallszahl" ist. Uns ist nie ganz klar geworden, welche Android-Versionen welcher Hersteller dieses Verfahren anwenden und wie man vielleicht doch noch an die Dateinamen kommt.
Da kann ich Euch vermutlich weiterhelfen.
In einem älteren Projekt habe ich bereits GMX-Dateien auf Android importiert und da brauchte ich auch den Namen um einige wichtige Informationen daraus zu extrahieren. Das geht auch wenn die URI nur eine Nummer enthält.
try {
log.info { "GPX file uri '$it'." }
val documentFile = DocumentFile.fromSingleUri(context, it)
val documentName = documentFile?.name
if (documentName != null) {
val routeId = documentName.substring(0, documentName.lastIndexOf('.'))
val format = documentName.substring(documentName.lastIndexOf('.')+1)
context.contentResolver.openInputStream(it).use {
log.info { "Importing GPX file '$documentName' with routeId '$routeId' and format '$format'." }
// if (it != null) MainModel.routePoolManager.importPlanningRoute(routeId, format, true, it)
}
} else {
log.error { "Cannot import GPX file without its name." }
}
} catch (e: Exception) {
log.error(e) { "Could not import GPX file." }
}
Der Schlüssel ist die Funktion DocumentFile.fromSingleUri. Hier der Output von Logcat:
GPX file uri 'content://com.android.providers.downloads.documents/document/477'.
Importing GPX file 'jit_cs_positive_preview.png' with routeId 'jit_cs_positive_preview' and format 'png'.
Du siehst, die URI hat am Ende nur die Nummer 477 aber die Funktion kann trotzdem den
Originalnamen extrahieren. (Ist ein PNG weil ich gerade kein GPX-File zur Hand hatte.)
One user wrote:
Da kann ich Euch vermutlich weiterhelfen.
In einem älteren Projekt habe ich bereits GMX-Dateien auf Android importiert und da brauchte ich auch den Namen um einige wichtige Informationen daraus zu extrahieren. Das geht auch wenn die URI nur eine Nummer enthält.
// if (it != null) MainModel.routePoolManager.importPlanningRoute(routeId, format, true, it) } } else { log.error { "Cannot import GPX file without its name." } } } catch (e: Exception) { log.error(e) { "Could not import GPX file." } }
Der Schlüssel ist die Funktion DocumentFile.fromSingleUri. Hier der Output von Logcat:
GPX file uri 'content://com.android.providers.downloads.documents/document/477'. Importing GPX file 'jit_cs_positive_preview.png' with routeId 'jit_cs_positive_preview' and format 'png'.
Du siehst, die URI hat am Ende nur die Nummer 477 aber die Funktion kann trotzdem den Originalnamen extrahieren. (Ist ein PNG weil ich gerade kein GPX-File zur Hand hatte.)
Man braucht dazu nur die Gradle-Abhängigkeit:
implementation("androidx.documentfile:documentfile:1.0.1")