In this page

Get AssetTrackingCallback

This example will guide you through the following steps:

  1. Initialization with Default Configurations: Learn how to set up the SDK with default configuration values, simplifying the integration process.

  2. Creating, Binding, and Initiating Tracking for a Simple Asset: Discover how to create an asset, bind it to your application, and commence tracking. This sequence of actions enables you to monitor asset locations effectively.

  3. Receiving AssetTrackingCallback in Your Activities: Gain insight into handling AssetTrackingCallback within your activities, ensuring that you can seamlessly manage and respond to asset-tracking events.

For all code examples, refer to Asset Tracking Android Code Examples

activity_get_asset_callback.xml view source

1<?xml version="1.0" encoding="utf-8"?>
2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3   xmlns:app="http://schemas.android.com/apk/res-auto"
4   xmlns:tools="http://schemas.android.com/tools"
5   android:layout_width="match_parent"
6   android:layout_height="match_parent"
7   android:orientation="vertical"
8   android:padding="10dp"
9   tools:context=".codeexample.GetAssetCallback">
10
11   <LinearLayout
12       android:layout_width="wrap_content"
13       android:layout_height="wrap_content">
14
15       <Button
16           android:id="@+id/callback_start_tracking"
17           android:layout_width="wrap_content"
18           android:layout_height="wrap_content"
19           android:text="@string/start_tracking" />
20
21       <Button
22           android:id="@+id/callback_stop_tracking"
23           android:layout_width="wrap_content"
24           android:layout_height="wrap_content"
25           android:layout_marginLeft="10dp"
26           android:text="@string/stop_tracking" />
27
28   </LinearLayout>
29
30
31   <TextView
32       android:id="@+id/callback_is_stop_tracking"
33       android:layout_width="wrap_content"
34       android:layout_height="wrap_content"
35       android:layout_marginTop="10dp" />
36
37   <TextView
38       android:id="@+id/callback_location_info"
39       android:layout_width="wrap_content"
40       android:layout_height="wrap_content"
41       android:layout_marginTop="20dp" />
42
43</LinearLayout>

GetAssetCallback view source

1class GetAssetCallback : AppCompatActivity(), AssetTrackingCallBack {
2    private lateinit var startTrackingButton: Button
3    private lateinit var stopTrackingButton: Button
4    private lateinit var trackingStatusView: TextView
5    private lateinit var locationInfoView: TextView
6
7    var permissionsManager: LocationPermissionsManager? = null
8    private var assetId = ""
9
10    override fun onCreate(savedInstanceState: Bundle?) {
11        super.onCreate(savedInstanceState)
12        setContentView(R.layout.activity_get_asset_callback)
13
14        // initialize the Asset Tracking SDK
15        initialize("PUT YOUR API KEY HERE")
16        assetTrackingAddCallback(this)
17
18        createAndBindAsset()
19        initView()
20    }
21
22    private fun initView() {
23        startTrackingButton = findViewById(R.id.callback_start_tracking)
24        startTrackingButton.setOnClickListener {
25            checkPermissionsAndStartTracking()
26        }
27
28        stopTrackingButton = findViewById(R.id.callback_stop_tracking)
29        stopTrackingButton.setOnClickListener {
30            assetTrackingStop()
31        }
32
33        trackingStatusView = findViewById(R.id.callback_is_stop_tracking)
34        locationInfoView = findViewById(R.id.callback_location_info)
35    }
36
37    override fun onDestroy() {
38        super.onDestroy()
39        assetTrackingRemoveCallback(this)
40
41        // add this to avoid blocking other example, could remove in real usage
42        assetTrackingStop()
43    }
44
45    @SuppressLint("SetTextI18n")
46    override fun onLocationSuccess(location: Location) {
47        locationInfoView.text = """
48            --------- Location Info --------- 
49            Provider: ${location.provider}
50            Latitude: ${location.latitude}
51            Longitude: ${location.longitude}
52            Altitude: ${location.altitude}
53            Accuracy: ${location.accuracy}
54            speed:${location.speed}
55            Bearing: ${location.bearing}
56            Time: ${location.time}
57            """.trimIndent()
58    }
59
60    override fun onLocationFailure(exception: Exception) {
61        locationInfoView.text = exception.message
62    }
63
64    @SuppressLint("SetTextI18n")
65    override fun onTrackingStart(assetId: String) {
66        trackingStatusView.text = "Asset Tracking is ON"
67    }
68
69    @SuppressLint("SetTextI18n")
70    override fun onTrackingStop(assetId: String, trackingDisableType: TrackingDisableType) {
71        trackingStatusView.text = "Asset Tracking is OFF"
72        locationInfoView.text = ""
73    }
74
75    private fun createAndBindAsset() {
76        val assetAttributes: Map<String, String> = mapOf("attribute 1" to "test 1", "attribute 2" to "test 2")
77        val assetProfile = AssetProfile.Builder().setCustomId(UUID.randomUUID().toString()).setName("testName")
78            .setDescription("testDescription").setAttributes(assetAttributes).build()
79
80        createNewAsset(assetProfile, object : AssetApiCallback<AssetCreationResponse> {
81            @SuppressLint("SetTextI18n")
82            override fun onSuccess(result: AssetCreationResponse) {
83                assetId = result.data.id
84                Toast.makeText(
85                    this@GetAssetCallback,
86                    "create asset successfully with asset id: $assetId",
87                    Toast.LENGTH_LONG
88                ).show()
89
90                onBindAsset()
91            }
92
93            override fun onFailure(exception: Exception) {
94                Toast.makeText(
95                    this@GetAssetCallback,
96                    "create asset failed with error: " + exception.message,
97                    Toast.LENGTH_LONG
98                ).show()
99            }
100        })
101    }
102
103    private fun onBindAsset() {
104        bindAsset(assetId, object : AssetApiCallback<Unit> {
105            @SuppressLint("SetTextI18n")
106            override fun onSuccess(result: Unit) {
107                Toast.makeText(
108                    this@GetAssetCallback,
109                    String.format(
110                        "bind asset successfully with assetId: %s",
111                        assetId
112                    ),
113                    Toast.LENGTH_LONG
114                ).show()
115            }
116
117            override fun onFailure(exception: Exception) {
118                val exceptionMessage = exception.message ?: ""
119                Toast.makeText(
120                    this@GetAssetCallback,
121                    "bind asset failed: $exceptionMessage",
122                    Toast.LENGTH_LONG
123                ).show()
124            }
125        })
126    }
127
128    @SuppressLint("MissingPermission")
129    private fun checkPermissionsAndStartTracking() {
130        if (LocationPermissionsManager.areAllLocationPermissionGranted(this)) {
131            assetTrackingStart()
132        } else if (!LocationPermissionsManager.isLocationServiceEnabled(this)) {
133            showLocationServiceOffDialog()
134        } else {
135            permissionsManager = LocationPermissionsManager(object : LocationPermissionsListener {
136                override fun onExplanationNeeded(permissionsToExplain: List<String>?) {
137                    Toast.makeText(
138                        this@GetAssetCallback, "You need to accept location permissions.",
139                        Toast.LENGTH_SHORT
140                    ).show()
141                }
142
143                override fun onPermissionResult(granted: Boolean) {
144                    if (granted) {
145                        if (LocationPermissionsManager.isBackgroundLocationPermissionGranted(this@GetAssetCallback)) {
146                            assetTrackingStart()
147                        } else {
148                            permissionsManager?.requestBackgroundLocationPermissions(this@GetAssetCallback)
149                        }
150                    } else {
151                        Toast.makeText(
152                            this@GetAssetCallback, "You need to accept location permissions.$granted",
153                            Toast.LENGTH_SHORT
154                        ).show()
155                    }
156                }
157            })
158            permissionsManager?.requestLocationPermissions(this)
159        }
160    }
161
162    private fun showLocationServiceOffDialog() {
163        val alertDialogBuilder = AlertDialog.Builder(this)
164
165        alertDialogBuilder.setTitle("Location Services Disabled")
166        alertDialogBuilder.setMessage("To enable location services, please go to Settings > Privacy > Location Services.")
167
168        alertDialogBuilder.setPositiveButton("OK") { dialogInterface: DialogInterface, _: Int ->
169            dialogInterface.dismiss() // Close the dialog
170        }
171
172        val alertDialog = alertDialogBuilder.create()
173        alertDialog.show()
174    }
175}

Upon executing the code example provided above, your app's appearance will resemble the following snippet:

Code Highlights

The above code snippet is for an Android activity that demonstrates how to receive asset tracking callbacks using the Asset Tracking SDK. The activity has the following main steps:

  1. Initialize the Asset Tracking SDK.

  2. Create an asset profile.

  3. Bind the asset profile to the device.

  4. Start tracking the asset.

  5. Receive asset tracking callbacks.

The following is a description of each step:

  1. To initialize the Asset Tracking SDK, the activity calls the initialize() method with your API key.

  2. To create an asset profile, the activity creates an AssetProfile object and sets its properties. The AssetProfile object specifies the asset's custom ID, name, description, and attributes.

  3. To bind the asset profile to the device, the activity calls the bindAsset() method with the asset ID.

  4. To start tracking the asset, the activity calls the assetTrackingStart() method.

  5. To receive asset tracking callbacks, the activity implements the AssetTrackingCallBack interface and overrides the following methods:

    1. onLocationSuccess(): This method is called when the asset's location is updated.

    2. onLocationFailure(): This method is called when the asset's location fails to be updated.

    3. onTrackingStart(): This method is called when asset tracking is started.

    4. onTrackingStop(): This method is called when asset tracking is stopped.

The activity also includes a few helper functions:

  1. createAndBindAsset(): This function creates an asset profile, binds it to the device, and starts tracking the asset.

  2. checkPermissionsAndStartTracking(): This function checks for location permissions and starts tracking the asset if they are granted.

  3. showLocationServiceOffDialog(): This function shows a dialog to the user if location services are disabled.

DIDN'T FIND WHAT YOU LOOKING FOR?