Get AssetTrackingCallback
This example will guide you through the following steps:
-
Initialization with Default Configurations: Learn how to set up the SDK with default configuration values, simplifying the integration process.
-
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.
-
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:
-
Initialize the Asset Tracking SDK.
-
Create an asset profile.
-
Bind the asset profile to the device.
-
Start tracking the asset.
-
Receive asset tracking callbacks.
The following is a description of each step:
-
To initialize the Asset Tracking SDK, the activity calls the initialize() method with your API key.
-
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.
-
To bind the asset profile to the device, the activity calls the bindAsset() method with the asset ID.
-
To start tracking the asset, the activity calls the assetTrackingStart() method.
-
To receive asset tracking callbacks, the activity implements the AssetTrackingCallBack interface and overrides the following methods:
-
onLocationSuccess(): This method is called when the asset's location is updated.
-
onLocationFailure(): This method is called when the asset's location fails to be updated.
-
onTrackingStart(): This method is called when asset tracking is started.
-
onTrackingStop(): This method is called when asset tracking is stopped.
-
The activity also includes a few helper functions:
-
createAndBindAsset(): This function creates an asset profile, binds it to the device, and starts tracking the asset.
-
checkPermissionsAndStartTracking(): This function checks for location permissions and starts tracking the asset if they are granted.
-
showLocationServiceOffDialog(): This function shows a dialog to the user if location services are disabled.