{"id":37029607,"url":"https://github.com/quuppalabs/android-quuppa-taglib","last_synced_at":"2026-01-14T03:33:59.917Z","repository":{"id":144532102,"uuid":"476729879","full_name":"quuppalabs/android-quuppa-taglib","owner":"quuppalabs","description":"Quuppa Tag emulation library for Android. Meant to be included into Android application projects.","archived":false,"fork":false,"pushed_at":"2025-09-04T13:27:20.000Z","size":1239,"stargazers_count":3,"open_issues_count":0,"forks_count":2,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-09-04T15:23:22.251Z","etag":null,"topics":["indoor","positioning","quuppa","rtls"],"latest_commit_sha":null,"homepage":"https://www.quuppa.com/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/quuppalabs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-04-01T13:22:07.000Z","updated_at":"2025-09-04T13:27:24.000Z","dependencies_parsed_at":null,"dependency_job_id":"40ab8d9e-e297-4308-9d98-9b72197fab15","html_url":"https://github.com/quuppalabs/android-quuppa-taglib","commit_stats":null,"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/quuppalabs/android-quuppa-taglib","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quuppalabs%2Fandroid-quuppa-taglib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quuppalabs%2Fandroid-quuppa-taglib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quuppalabs%2Fandroid-quuppa-taglib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quuppalabs%2Fandroid-quuppa-taglib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/quuppalabs","download_url":"https://codeload.github.com/quuppalabs/android-quuppa-taglib/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/quuppalabs%2Fandroid-quuppa-taglib/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408843,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["indoor","positioning","quuppa","rtls"],"created_at":"2026-01-14T03:33:59.202Z","updated_at":"2026-01-14T03:33:59.906Z","avatar_url":"https://github.com/quuppalabs.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# android-quuppa-taglib\n\nAn Android Quuppa Tag emulation library to be included into Android application projects. You can make any Android device with BLE and API level 26 (Android version 8.0+) trackable in [Quuppa Intelligent Locating System](https://www.quuppa.com/) by including this library in your Android application.\n\n## Getting Started\n\nSee the [android-quuppa-tag demo](https://github.com/quuppalabs/demo-android-quuppa-tag) for an example of how to use this library. Review our full [Android Tag Emulation Specification v2.1](https://github.com/quuppalabs/android-quuppa-taglib/blob/main/Quuppa%20Tag%20Emulation%20for%20Android%20Devices%20v2.1.pdf) to understand the structure of Quuppa specific advertisement data.\n\nAlso check out javadoc for the library on javadoc.io.\n\n[![javadoc](https://javadoc.io/badge2/com.quuppa/android-quuppa-taglib/javadoc.svg)](https://javadoc.io/doc/com.quuppa/android-quuppa-taglib)\n\n## Quick Start\n\n 1. Include the latest android-quuppa-taglib in your Android application's build.gradle file by adding:\n```\n dependencies {\n    implementation 'com.quuppa:android-quuppa-taglib:2.0.17'\n}\n```\n 2. copy all permissions as well as _\u003c service .. \u003e_ and _\u003c receiver \u003e_ configurations from our demo Android Quuppa Tag's [AndroidManifest.xml](https://github.com/quuppalabs/demo-android-quuppa-tag/blob/main/src/main/AndroidManifest.xml) into your own application's AndroidManifest.xml\n 3. Make sure you your application asks for necessary runtime permissions (review/copy from the demo app's [QuuppaTagEmulationDemoActivity.java](https://github.com/quuppalabs/demo-android-quuppa-tag/blob/main/src/main/java/com/quuppa/quuppatag/QuuppaTagEmulationDemoActivity.java)). Then call `QuuppaTag.start(this);` from your activity to start the service.\n\n## Using the library\n\nThe library is ready to be included in your Android project as a compiled dependency and available as a JAR dependency through Maven central.\n\n[![Maven Central](https://maven-badges.herokuapp.com/maven-central/com.quuppa/android-quuppa-taglib/badge.svg)](https://maven-badges.herokuapp.com/maven-central/com.quuppa/android-quuppa-taglib)\n\nThe library requires several permissions:\n\n```\n    \u003cuses-permission android:name=\"android.permission.BLUETOOTH\"/\u003e\n    \u003cuses-permission android:name=\"android.permission.BLUETOOTH_ADVERTISE\"/\u003e\n    \u003cuses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/\u003e\n    \u003cuses-permission android:name=\"android.permission.BLUETOOTH_CONNECT\"/\u003e\n    \u003cuses-permission android:name=\"android.permission.FOREGROUND_SERVICE\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.FOREGROUND_SERVICE_CONNECTED_DEVICE\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.SCHEDULE_EXACT_ALARM\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.WAKE_LOCK\" /\u003e\n    \u003cuses-permission android:name=\"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS\"/\u003e\n```\nREQUEST_IGNORE_BATTERY_OPTIMIZATIONS is a UI permission (again see android-quuppa-tag demo app) but in order to make sure the OS doesn't kill the service when the app is not on the foreground, you should disable battery optimizations. You also need to declare the service and receiver as described in the demo app's [AndroidManifest.xml](https://github.com/quuppalabs/demo-android-quuppa-tag/blob/main/src/main/AndroidManifest.xml).\n\nThe 1.x version of the library provided simple operations in a stateless utility class and required user to implement a service around it to make it run for longer periods. The current 2.x version implements a full service that also uses the accelerometer to determine whether the device is moving or not.\n\nThe service is very simple to use. There are static convenience operations in [QuuppaTag](https://github.com/quuppalabs/android-quuppa-taglib/blob/main/src/main/java/com/quuppa/tag/QuuppaTag.java) for starting and stopping the service and modifying preferences (e.g. setting the tag ID, accelerometer sensitivity or [AdvertisingSet TX power](https://developer.android.com/reference/android/bluetooth/le/AdvertisingSetParameters)). However, for typical usage, you shouldn't need to change anything. The default tag ID (based on [Secure.ANDROID_ID](https://developer.android.com/reference/android/provider/Settings.Secure#ANDROID_ID) if available) is guaranteed to stay constant for the lifetime of the application but you can also supply your own ID if you so prefer. \n\nYou can also start the service directly with:\n```\nIntent tagServiceIntent = new Intent(this, QuuppaTagService.class);\nstartForegroundService(tagServiceIntent);\n```\nIn that case though, you should first call `QuuppaTag.setServiceEnabled(context, true);` to set the service in enabled state. This is so that service can automatically start on system events but only acquires the wake lock and starts emitting BLE advertisement packets when in enabled state.\n\n## Non-RTLS use\n\nThis library is really not so useful outside Real-Time Locationing System (RTLS) scope. Even so, it may give you ideas for creating your own never ending service that can ben run on modern Android devices (because Google has been tightening rules around long running service all the time). In short, it's a combination of implementing a frontend service (which this library does), holding a wake lock and disabling battery optimizations - look for examples in the demo app for permission requests. Feel free to explore the source code.\n\n## License\n\nLicensed under Apache 2.0 License. \n\nAdditional Terms:  \nNeither the name \"Quuppa\" nor the names of the contributors to the android-quuppa-taglib repository may be used to endorse or promote products derived from the android-quuppa-taglib repository without the prior written permission of Quuppa Oy.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquuppalabs%2Fandroid-quuppa-taglib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquuppalabs%2Fandroid-quuppa-taglib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquuppalabs%2Fandroid-quuppa-taglib/lists"}