OpenStreetMap on Boox Nova3Color

I have a Boox Nova3Color, which is a Android based tablet with a colour E ink display. Unlike many electronic devices this can be read outdoors in sunlight.

As an E-reader it allows me to take more electronic versions of Field Guides and/or travel books with me than would fit in the same space as physical books.

As an Android device I installed F-Droid, and through that installed Wikipedia client app, which allows Wikipedia pages to be saved for offline access – useful for off-line travel or wildlife information.

Maps on the Boox

As well as a philosophical reasons for preferring OpenSteetMap, it is often a better alternative for walkers (which is where a map on a tablet with a screen which is readable in daylight makes sense), as its network of volunteers are often walkers or cyclists themselves.

I installed OSMAnd – an Android interface to OpenStreetMap, and download maps of areas where I am travelling. The Boox has a Wifi connection, but no Mobile Network adaptor so systems which rely on an Internet connection are not useful.

With Field Guides and Maps this puts all the information which was available to a walker in pre-internet times into one place.

Adding GPS

My mobile phone also has OSMAnd, and a built in GPS receiver, but has a much smaller screen, and is essentially unreadable in any form of sunlight. Tired of hunching over my phone trying to create a shadow to see where I was, I decided to look for a better solution.

An initial search for an Open Source app which would make my phone GPS available over Bluetooth the the Boox did not turn up anything, but I did find BlueGps, which I installed on the Boox.

I bought a used CoPilot Bluetooth GPS reciever from eBay, and paired it with the Boox (the CoPilot paring code is 0183).

I already had the Android Debug Bridge (adb) installed on my Debian desktop.

The Boox is unusual in that is does not follow the usual Android route to enable Developer mode. Here is way to do this on the Boox.

Select the Apps screen, and the menu icon near the top of the screen.

Then select the App Mangement option, and enable USB Debug Mode

Connect the Boox to your main computer and do

adb shell settings put secure mock_location 1
adb shell appops set android:mock_location allow

Start BlueGPS check that the Boox is connected, not just paired with the CoPilot (which is called BTGPS as a Bluetooth name). The BlueGPS screen should look like

Note that Enable NMEA log is important as that seems to be needed for OSMAND to pick up the location information being supplied by BlueGPS.

Go to OSMAND and you should see that is shows your location !

Possible Developments

This is now working for me, but is not ideal. Here are some possible improvements

Bluetooth sender App on phone

Relying on an external hardware device, particularly one which is obsolete is not ideal, but more recent stand alone GPS receivers tend to come with a whole host of unwanted features, such as allowing you to upload your position history to the cloud, having built in maps (often on screens which can not be read in daylight!).

A better option would be an Open Source App on a phone, which would read its position and send it over Bluetooth. Unfortunately this is not as easy as it might seem, as Google restricts the ability of Apps to read the device location unless they are in the Foreground – i.e. the app the user is actively interacting with) This is to prevent Apps from secretly acting as device trackers and running in the background and reporting the device location to some third party.

Communicate between BlueGPS and OSMAND via an Intent

BlueGPS needs to be a ‘Mock Location Provider’ – which is really a facility intended for testing Android apps which rely on the device location without needing to actually take the device there.

If it could use an Intent to pass the location information to OSMAND (which would also need to be modified to accept locations via an Intent) then it would not need special Android privileges.

Leave a comment

Your email address will not be published. Required fields are marked *