Android setup

Minimum requirements

First, check out if you fulfill the SDK minimum requirements:

Requirement

Version

Minimum Android SDK version

Android API 16

Android Support Library v4

28+

Google Play Services Ads

12.+

Google Play Services Location

12.+

If your project is using AndroidX you will need to make sure Jetifier is enabled in your gradle.properties file:

gradle.properties
gradle.properties
android.useAndroidX=true
android.enableJetifier=true

Dependencies

Update the top-level build.gradle script of your project to include the Incognia maven repository:

allprojects {
repositories {
maven { url "https://repo.incognia.com/android/" }
...
}
}

In your app-level build.gradle file, add the following dependencies.

Android X
Android Support
Android X
dependencies {
// Required
implementation 'com.incognia:incognia:5.9.1'
// Google Play Services
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.gms:play-services-ads-identifier:17.0.0'
// Compatibility with Support Library
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
}
Android Support
dependencies {
// Required
implementation 'com.incognia.incognia:5.9.1'
// Google Play Services
implementation 'com.google.android.gms:play-services-location:16.0.0' // You can use versions from 12.0.0 up to 16.0.0
implementation 'com.google.android.gms:play-services-ads-identifier:16.0.0' // You can use versions from 12.0.0 up to 16.0.0
// Support Library
implementation 'com.android.support:support-v4:28.0.0'
}

After updating your app-level build.gradle, the project must be synced for the changes to take effect.

Update Android manifest

Add the following <uses-permission> tags inside the <manifest> tag of your AndroidManifest.xml file.

AndroidManifest.xml
AndroidManifest.xml
<manifest>
<!-- Required for connectivity access -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- Required for location services -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- Improves location accuracy and battery consumption -->
<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION"/>
<!-- Allows the SDK to restart itself after the device is rebooted -->
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<!-- For apps targeting Android 10 (29) and higher only -->
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
</manifest>

Incognia SDK permission reasoning can be seen here.

Add Incognia's config file to your project

The Incognia SDK initialization relies on the presence of a incognia.xml file in the main/res/values directory of your project. Go to the dashboard to generate the SDK configuration XML if you don't have it. The config properties semantics are explained here.

Initializing the SDK

Inside the onCreate method of your Application class, insert the following code to initialize the Incognia SDK.

Kotlin
Java
Kotlin
import com.incognia.icg.Incognia
class CustomApplication : Application() {
override fun onCreate() {
super.onCreate()
//Initializes the Incognia SDK
Incognia.init(this)
}
}
Java
import com.incognia.icg.Incognia;
public class CustomApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//Initializes the Incognia SDK
Incognia.init(this);
}
}

Tips:

  • For instructions on how to create your own implementation of the Application class, please check the official Android documentation.

  • If you intend conditionally initialize the Incognia SDK, please check this section

If the SDK was initialized properly, your Logcat output will contain the following logs:

Logcat
Logcat
I/Incognia: Incognia 5.9.1 is running
I/Incognia: Incognia Location 5.9.1 is running

Request runtime permissions

The previous step started the Incognia SDK, but your application still needs to request the location permissions (i.e., ACCESS_FINE_LOCATION and ACCESS_BACKGROUND_LOCATION) to the user in order to fully unlock the location capabilities of the SDK.

We recommend that the permissions are requested as shown in the Android documentation.

Attention: Without the Manifest.permission.ACCESS_FINE_LOCATION, most features will not be available. It is extremely important that the user is asked for permission and that the app has a relevant reason to do so. If you are targeting Android 10, you also must ask for Manifest.permission.ACCESS_BACKGROUND_LOCATION.

What's next?

From here, you can either complete the production integration with Incognia APIs or follow the steps to test the Incognia with the SDK-only trial integration. In this mode, you will receive access to the dashboard which displays Incognia risk scores without needing to integrate the APIs.