{"id":46196302,"url":"https://github.com/ykasidit/bluetooth_gnss","last_synced_at":"2026-03-03T03:16:01.304Z","repository":{"id":40997226,"uuid":"304777593","full_name":"ykasidit/bluetooth_gnss","owner":"ykasidit","description":"Bluetooth GNSS app on Google Play Store","archived":false,"fork":false,"pushed_at":"2025-11-15T06:34:36.000Z","size":2567,"stargazers_count":105,"open_issues_count":36,"forks_count":27,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-11-15T08:26:19.377Z","etag":null,"topics":["android","bluetooth","gnss","ntrip","rtk"],"latest_commit_sha":null,"homepage":"https://play.google.com/store/apps/details?id=com.clearevo.bluetooth_gnss\u0026hl=en\u0026gl=US","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ykasidit.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"COPYING","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},"funding":{"github":"ykasidit"}},"created_at":"2020-10-17T02:00:31.000Z","updated_at":"2025-11-15T06:32:20.000Z","dependencies_parsed_at":"2023-02-15T22:15:42.992Z","dependency_job_id":"46a11fad-71d1-4417-a45a-47b784d75dd5","html_url":"https://github.com/ykasidit/bluetooth_gnss","commit_stats":null,"previous_names":[],"tags_count":65,"template":false,"template_full_name":null,"purl":"pkg:github/ykasidit/bluetooth_gnss","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ykasidit%2Fbluetooth_gnss","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ykasidit%2Fbluetooth_gnss/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ykasidit%2Fbluetooth_gnss/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ykasidit%2Fbluetooth_gnss/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ykasidit","download_url":"https://codeload.github.com/ykasidit/bluetooth_gnss/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ykasidit%2Fbluetooth_gnss/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30030855,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-03T00:31:48.536Z","status":"online","status_checked_at":"2026-03-03T02:00:07.650Z","response_time":61,"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":["android","bluetooth","gnss","ntrip","rtk"],"created_at":"2026-03-03T03:16:00.322Z","updated_at":"2026-03-03T03:16:01.291Z","avatar_url":"https://github.com/ykasidit.png","language":"Java","funding_links":["https://github.com/sponsors/ykasidit"],"categories":[],"sub_categories":[],"readme":"Bluetooth GNSS\n--------------\n\nConnect your Android phone to external Bluetooth GPS, GLONASS, Galileo and BeiDou receivers and use the received location in your android phone via the mock location provider.\n\nOfficial app is available on Google Play as [Bluetooth GNSS](https://play.google.com/store/apps/details?id=com.clearevo.bluetooth_gnss\u0026hl=en\u0026gl=US).\n\nThis project is maintained in open spirit and evolves gradually as time and energy allow outside my main work.\nIf it contributes to your organization’s research or company’s products, you’re welcome to [sponsor or support its development via GitHub Sponsors](https://github.com/sponsors/ykasidit).\nEvery gesture helps sustain independent engineering and open innovation. 🌞\n\n\n\n\n\nBuild instructions\n-----------\n\n* Install the the [Flutter SDK](https://flutter.dev/docs/get-started/install) as per official instructions including the 'Android setup' and make sure that the Android SDK is installed.\n\n* Make sure the flutter sdk version matches that in pubspec.yaml:\n\n`flutter downgrade v\u003cflutter ver in pubspec.yaml\u003e`\n\n* In this folder run:\n`flutter pub get`\n\n* Install Rust - follow instructions in:\n`https://rustup.rs/`\n\n* Install flutter_rust_bridge: match that of flutter_rust_bridge in pubspec.yaml - see https://cjycode.com/flutter_rust_bridge/quickstart)\nexample:\n```\nrustup install 1.90\nrustup default 1.90\ncargo install flutter_rust_bridge_codegen --version 2.11.1\n```\n\n* If you modify the rust code or upgrade versions in above then you need to update update with:\n`flutter_rust_bridge_codegen generate`\n\nYou might need below if above faces issues:\n```\nflutter_rust_bridge_codegen integrate\n```\n\nYou might have to restore `main.dart` after above `generate` command:\n`git checkout lib/main.dart`\n\n\n* If you don't already have an android signing key, create one as per:\n\u003chttps://docs.flutter.dev/deployment/android#create-an-upload-keystore\u003e\n\n* Create the file `key.properties` in parent of this folder and add your keystore information:\n```\nstoreFile=/path/to/keystore.jks\nstorePassword=*********\nkeyAlias=bluetooth_gnss\nkeyPassword=**********\n``` \n* Connect an android phone with adb working\n`adb devices`\n\n* Try build and run the app in debug mode:\n`flutter run`\nIf all went well, you would see the app now run in your connected phone.\n\n* Try build a release android installer (apk) file:\n`flutter build apk`\nIf all went well, it would create the apk file in the folder:\n`build/app/outputs/flutter-apk/app-release.apk`\n\n* Develop in Android studio:\n  - Open android studio, and choose 'Projects' \u003e 'Open' to this folder (or File \u003e Open... menu) and you can edit the source code then run 'main.dart' from there. This is suitable for editing the dart files in the lib folder.\n  - UI changes to main.dart can be seen immediately (hot-reload) on phone but function changes or java/engine part changes won't, you need to 'stop' then 'run' main.dart again for the changes to take effect.\n  - Auto-completion of java code (in the android subfolder) and running of the java unit-tests won't work as this Android Studio is run in a 'flutter' project mode.\n  - To edit the engine part and run the java unit tests, simply open the 'android' subfolder of this folder in a new Android Studio instance: File \u003e Open ... choose: bluetooth_gnss \u003e android. After Android Studio is ready, then you can try run some tests like browse on the left panel to libecodroidgnss_parse \u003e java \u003e (test) and right click on 'test_nmea_parse' \u003e Run.\n\n* Use the `flutter build apk` command when you want to build a release apk file.\n\nRegen icons\n------------\n\n`dart run flutter_launcher_icons`\n\nInitiate connection using external intent\n-----------------------------------------\nI'm using [Tasker](https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm) to send the intent, but other methods are possible\n\n### Configure the task\nOn the `TASKS` tab, create a new task (e.g. _Connect GPS_) and add the action _Send Intent_. It is configured as follows:\n* Action: `bluetooth.CONNECT`\n* Cat: `Default`\n* Mime Type: `text/plain`\n* Data: _\u0026lt;empty\u0026gt;_\n* Extra: _\u0026lt;see json string below\u0026gt;_\n* Package: `com.clearevo.bluetooth_gnss`\n* Class: _\u0026lt;empty\u0026gt;_\n* Target: `Broadcast Receiver`\n\n**json string in Extra field**\n\nAdd this string without newlines. All values are optional. Note that `config` is without double quotes\n\n```\nconfig: {\n    \"bdaddr\": \"%bt_address\",\n    \"secure\": false,\n    \"reconnect\": true,\n    \"log_bt_rx\": true,\n    \"disable_ntrip\": true,\n    \"extra\": {\n        \"ntrip_user\": \"taskeruser\",\n        \"ntrip_mountpoint\": \"taskermount\",\n        \"ntrip_host\": \"taskerhost\",\n        \"ntrip_port\": \"2000\",\n        \"ntrip_pass\": \"taskerpass\"\n    }\n}\n```\n\n**Example**\n\nIf you only want to override the bluetooth address, you can send this as extra:\n\n```\nconfig: {bdaddr:\"%bt_address\"}\n```\n\nIf you don't use the BT Connection Event (see below) but the BT Connection state, you have to use the real address of your device:\n\n```\nconfig: {bdaddr: \"00:11:22:33:44:55:66\"}\n```\n\nIf you want to disable ntrip as well:\n\n```\nconfig: {bdaddr: \"00:11:22:33:44:55:66\", disable_ntrip: true}\n```\n\n### Configure the event\nOn the `PROFILES` tab, you can use a state change or a event. In this example, I'm using the [BT Connection event](https://tasker.joaoapps.com/userguide/en/help/eh_bt_connect_disconnect.html) with the following conditions:\n\n* `%bt_connected EQ true`\n* `$bt_address EQ 00:11:22:33:44:55:66`, the bluetooth address of the GPS receiver\n\nThis will trigger the event only when my GPS receiver is connected. You can add multiple devices here, which is why I choose this method: in the action, the variable `%bt_address` will be available as well and I'll use that to pass to Bluetooth GNSS.\n\nSpecial thanks\n--------------\n\n- Thanks to Geoffrey Peck from Australia for his tests, observations and suggestions.\n- Thanks to Peter Mousley from Australia for his expert advice, tests, code review, guidance and code contribution.\n- Thanks to [Auric Goldfinger](https://github.com/auricgoldfinger) for his great contribution in developing the auto connect on boot feature and the detailed readme merged into above.\n- Thanks to everyone who provided comments/suggestions on the [bluetooth_gnss project issues page on github](https://github.com/ykasidit/bluetooth_gnss/issues).\n\nAuthors\n--------\n\n- [Kasidit Yusuf](https://github.com/ykasidit)\n- [Auric Goldfinger](https://github.com/auricgoldfinger)\n- For the most up-to-date list, run `git shortlog -sne` in this git repo.\n\nCopyright and License\n---------------------\n\nCopyright (C) 2019 Kasidit Yusuf and all respective project source code contributors.\n\nThis program is free software: you can redistribute it and/or modify\nit under the terms of the GNU General Public License as published by\nthe Free Software Foundation, either version 2 of the License, or\n(at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program.  If not, see \u003chttps://www.gnu.org/licenses/\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fykasidit%2Fbluetooth_gnss","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fykasidit%2Fbluetooth_gnss","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fykasidit%2Fbluetooth_gnss/lists"}