Advanced configurations

Manually initialize the SDK

By default, the DriveKit SDK is automatically initialized as soon as you add the TripAnalysis module to your project.

In some cases, you may want to manually initialize the SDK. To do this you have to disable the automatic initialization by adding the following lines into your Manifest file:

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application>
        ...
        <meta-data
            android:name="com.drivekit.sdk.auto_init_enabled"
            android:value="false" />
    </application>
</manifest>

Then, you must call the initialization methods in the onCreate method of your Application class:

class MyApplication: Application() {
    override fun onCreate() {
        ...
        DriveKit.initialize()

        val tripNotification: TripNotification = ...
        DriveKitTripAnalysis.initialize(tripNotification)

        // Initialize every other DriveKit modules you use:
        // DriveKitDriverData.initialize()
        // DriveKitVehicle.initialize()
        // etc.
    }
}

Check your configuration

You can check if DriveKit is well configured with the following method:

fun isConfigured(): Boolean

This method returns true if these three conditions are met:

  • DriveKit Core is initialized

  • an API key is set

  • a userId is set

Logging

DriveKit comes with a logging feature that is enabled by default. This feature allows you to quickly identify the cause of a problem. We recommend leaving the log enabled as it does not consume memory space and is useful in the support phase. However, if you don't want to use it, it can be disabled.

You can retrieve the Uri log file by calling the following method:

fun getLogUriFile(context: Context): Uri?

If your device version is on Android 10 or below, you can directly find the log file in Android/data/<your-app-package-name>/files/<path-to-my-log-directory>

If your device version is on Android 11 and above and if you have The Permissions Utils component on your app, you can get a log file of the previous month and the current one with the method getZippedLogUriFiles(), or by clicking on “Contact support” and change the email receiver. The file will be in attachment of the email.

Disable logging by calling:

fun disableLogging(showInConsole: Boolean = true)

To enable logging, call the following method specifying the path of the log directory.

fun enableLogging(logPath: String = "/DriveKit", showInConsole: Boolean = true)

Listen for permissions and sensors status changes

If the user disables the sensors or revokes permissions, the application would not be able to detect and record a trip. To avoid this, the SDK identifies important sensor state and permission changes.

These events are shared when the user is logged in and you can use them in your application to inform the user via a visual alert or by displaying a notification.

Event changes callbacks may not be fired in real time due to technical restrictions of Android.

DKDeviceConfigurationListener

DKDeviceConfigurationListener is the interface used to get callbacks when device configuration changes are detected:

interface DKDeviceConfigurationListener {
    fun onDeviceConfigurationChanged(event: DKDeviceConfigurationEvent)
}

Add a listener

To add a listener and get informed for device configuration events, you can call the following method:

fun addDeviceConfigurationListener(listener: DKDeviceConfigurationListener)

Remove a listener

To remove a specific listener, call the following method:

fun removeDeviceConfigurationListener(listener: DKDeviceConfigurationListener)

Remove all listeners

To remove all listeners, call the following method:

fun removeAllDeviceConfigurationListeners()

DKDeviceConfigurationEvent

DKDeviceConfigurationEvent is a sealed class that describes a device configuration change event:

sealed class DKDeviceConfigurationEvent {
	data class LocationPermission(val isValid: Boolean) : DKDeviceConfigurationEvent()
	data class ActivityPermission(val isValid: Boolean) : DKDeviceConfigurationEvent()
	data class NearbyDevicesPermission(val isValid: Boolean) : DKDeviceConfigurationEvent()
	data class NotificationPermission(val isValid: Boolean) : DKDeviceConfigurationEvent()
	data class AutoResetPermission(val isValid: Boolean) : DKDeviceConfigurationEvent()
	data class AppBatteryOptimisation(val isValid: Boolean) : DKDeviceConfigurationEvent()
	data class LocationSensor(val isValid: Boolean) : DKDeviceConfigurationEvent()
	data class BluetoothSensor(val isValid: Boolean) : DKDeviceConfigurationEvent()
}

Possible events are:

ValueDescription

LocationPermission

Location permission status changed

ActivityPermission

Activity Recognition permission status changed

NearbyDevicesPermission

Nearby Devices permission status changed

NotificationPermission

Notification permission status changed

AutoResetPermission

Auto-reset permission status changed

AppBatteryOptimization

Battery Optimization app status changed

LocationSensor

Location sensor status changed

BluetoothSensor

Bluetooth sensor status changed

The DriveKit SDK will run optimally if the isValid value of each event is true. The table below explains the impact of a status that is not true:

EventCriticalityConsequence if value is false

LocationPermission

🔴

No trip recording if app has no access to GPS sensor

ActivityPermission

🟡

Poor trip detection

NearbyDevicesPermission

🟡

No trip detection based on beacon or Bluetooth system

NotificationPermission

🟢

Your application cannot send notification to the user if the permission is revoked.

AutoResetPermission

🟢

Revocation of all permissions if app is not opened for 3 months.

AppBatteryOptimization

🟡

Poor trip detection, application may be killed in background

LocationSensor

🔴

No trip recording if location sensor is disabled

BluetoothSensor

🟡

No trip detection based on beacon or Bluetooth system

Get user’s information

To get the user's information (first name, last name and pseudo), call the getUserInfo method. This method will retrieve and save these data locally:

fun getUserInfo(
        listener: GetUserInfoQueryListener,
        synchronizationType: SynchronizationType = SynchronizationType.DEFAULT
)

Update user’s information

You can add information to a user's account such as first name, last name and pseudo.

These details are optional and you can choose to make the user's account anonymous. To update the user's information, call the following method :

fun updateUserInfo(
        firstname: String? = null,
        lastname: String? = null,
        pseudo: String? = null,
        listener: UpdateUserInfoQueryListener
)

Update UserId

It is possible to update the userId by calling the following method:

fun updateUserId(userId: String)

To be able to check whenever userId got updated and catch the update status you have to use DriveKitListener listener.

Account deletion

You can delete a driver's account in DriveKit. This action deletes all the data related to the account.

The deletion can be done instantly or with delay.

  • In the first case, when the method is called, the account is instantly deleted.

  • In the second case, the driver has 30 days to log back into the application and reactivate his account.

To delete a driver's account, use the following method:

fun deleteAccount(instantDeletion: Boolean = false)

instantDeletion can have 2 values:

  • false : Default value, allows the user to recover the deleted account by logging-in again with the same credentials. Users have 30 days starting from the day when the account was deleted.

  • true : Allow to delete an account instantly. The account and all the related data will be immediately deleted and no rollback is possible.

Your team needs to have the deletion feature activated to use this method. Please contact DriveQuant if you need it.

To be able to check whenever the account deletion is complete, you have to use the DriveKitListener interface.

You should restore the DriveKit API key in the onAccountDeleted() callback only when the status value is SUCCESS.

Reset

If you need to reset DriveKit configuration (user logout for example), you can call the following method:

fun reset()

All data saved locally will be erased and default configuration for every module will be restored.

Last updated