Zum Hauptinhalt springen

Android-SDK

Überblick

Das WAS VPS Android-SDK stellt Sceneform-Fragmente und Lifecycle-Helfer bereit, um Nutzer:innen auf ARCore-Geräten innerhalb von VPS-Karten zu lokalisieren. Der Ablauf folgt dem Immersal-Stil: Voraussetzungen prüfen, Abhängigkeit hinzufügen, Manifest vorbereiten und den Dienst starten.

Voraussetzungen

  • Mindestens Android SDK 24 (Android 7.0)
  • Gerät mit ARCore-Support
  • Projekt mit Kotlin (Beispiele sind in Kotlin)

API-Key benötigt? Erhalte ihn über space.web-ar.studio oder per Mail an support@webar3.com / support@web-ar.studio.

SDK installieren

  1. Stellen Sie sicher, dass Maven Central eingebunden ist:

    allprojects {
    repositories {
    mavenCentral()
    // weitere Repositories …
    }
    }
  2. Abhängigkeit im App-Modul ergänzen:

    dependencies {
    implementation "com.arstudio:wasvps-sdk:1.0.0"
    }
  3. Gradle synchronisieren.

Manifest vorbereiten

ARCore-Anforderungen deklarieren und bei Bedarf die minimale SDK-Version überschreiben:

<!-- WASVPS SDK bei minSdk < 24 erlauben -->
<uses-sdk tools:overrideLibrary="com.arstudio.wasvps_sdk, com.google.ar.sceneform.sceneform, com.google.ar.sceneform.ux" />

<!-- Standardmäßig nur ARCore-Geräte zulassen -->
<uses-feature
android:name="android.hardware.camera.ar"
android:required="true" />

Soll die Play-Store-Filterung erweitert werden, android:required="false" setzen und tools:replace="android:required" beibehalten.

Schnellstart mit WASVPSArFragment

Den mitgelieferten FragmentContainer in das Layout aufnehmen:

<!-- res/layout/activity_main.xml -->
<androidx.fragment.app.FragmentContainerView
android:id="@+id/vFragmentContainer"
android:name="com.arstudio.wasvps_sdk.ui.WASVPSArFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

supportFragmentManager.beginTransaction()
.replace(R.id.vFragmentContainer, WASVPSArFragment())
.commit()
}
}

Service abrufen und Lokalisierung starten, sobald Location IDs vorliegen:

val fragment = supportFragmentManager
.findFragmentById(R.id.vFragmentContainer) as WASVPSArFragment

val config = WASVPSConfig.getIndoorConfig(listOf("your-location-id"))
val service = fragment.vpsService

service.setVpsConfig(config)
service.setVpsCallback(object : VpsCallback {
override fun onSuccess() = Unit
override fun onFail() = Unit
override fun onStateChange(state: State) = Unit
override fun onError(error: Throwable) {
Log.e("VPS", "Localization error", error)
}
})

service.startVpsService()

service.stopVpsService() z. B. in onPause aufrufen.

Individuelle Fragment-Integration

Bei eigenen ArFragment-Implementierungen WASVPSService selbst anlegen und verwalten:

class CustomArFragment : ArFragment() {
private val vpsService = WASVPSService.newInstance()

override fun onAttach(context: Context) {
super.onAttach(context)
WASVPSSdk.init(context.applicationContext)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
vpsService.bindArSceneView(arSceneView)
vpsService.setVpsConfig(WASVPSConfig.getOutdoorConfig(listOf("location-id")))
}

override fun onResume() {
super.onResume()
vpsService.resume()
vpsService.startVpsService()
}

override fun onPause() {
vpsService.pause()
vpsService.stopVpsService()
super.onPause()
}

override fun onDestroyView() {
vpsService.destroy()
super.onDestroyView()
}
}

Inhalte verankern

Nodes relativ zu vpsService.worldNode platzieren. Alle Kinder dieses Knotens übernehmen nach erfolgreicher Lokalisierung die globale Pose.

val anchorNode = Node().apply {
setParent(vpsService.worldNode)
localPosition = Vector3(0f, 0f, -1f)
}

Fehlerbehebung

  • Sicherstellen, dass Google Play Services for AR installiert und aktuell ist.
  • Bei fehlender Lokalisierung API-Key, Location IDs und Konfigurationsübergabe prüfen.
  • Das Modul /sample im Repository zeigt einen vollständigen Ablauf inkl. Berechtigungen und UI.