ge0rg / aprsdroid

APRSdroid - Geo-Location for Radio Amateurs
https://aprsdroid.org/
GNU General Public License v2.0
515 stars 100 forks source link

Feature Request: Kindle Fire installable .APK #34

Closed rct closed 12 years ago

rct commented 12 years ago

Would it be possible to get an .APK that is can be installed and run on the Kindle Fire 7" android tablet?

Currently, trying to install the provided.APK aborts. (I have Google Maps and Google Earth sideloaded, they both run ok).

While the limited hardware in Kindle Fire won't support many of the APRSdroid features, it's 7" screen should be nice for viewing who/what's around.

This is a low-priority feature request given the kindle fire's lack of 3G, GPS, bluetooth, mic/audio-in.

Thanks.

ge0rg commented 12 years ago

Please try the OSM version from the download directory..

I am pretty sure the problem is not GPS but google maps that is missing.

rct commented 12 years ago

On 3/31/2012 12:47 PM, Georg Lukas wrote:

Please try the OSM version from the download directory..

I am pretty sure the problem is not GPS but google maps that is missing.

Thank you for the fast reply.

I tried, APRSdroid-gl-2012-03-21_osm.apk, the install failed with "App not Installed" the same way as the non-OSM version. I did not try and install the map first. (I had assumed it would install and I'd get a run time error with no map data.)

ge0rg commented 12 years ago

OK, I see.

Could you try installing the app using adb instead of the normal installer, or make a log using CatLog or a similar app? I would like to know the error message for the installation failing.

rct commented 12 years ago

On 3/31/2012 2:52 PM, Georg Lukas wrote:

Could you try installing the app using adb instead of the normal installer, or make a log using CatLog or a similar app? I would like to know the error message for the installation failing.

Here's what I believe is the relevant log excerpt. It's not finding Google maps (as a shared library)

Package org.aprsdroid.app requires unavailable shared library com.google.android.maps; failing!

I had sideload google maps from my Galaxy Nexus. Maps works ok on the Kindle Fire, though it does occasionally crash on some operations, but it is usable.

There is a Google shared services package, that is supposed to provide google account access that allows other google apps to work. I haven't installed that yet, because I think that requires rooting the kindle to install it.

03-31 15:19:58.850 I/ActivityManager( 1397): Displayed com.android.packageinstaller/.PackageInstallerActivity: +703ms 03-31 15:20:00.975 D/ActivityManager( 1397): Starting: Intent { dat=/sdcard/Download/APRSdroid-gl-2012-03-21_osm.apk cmp=com.android.packageinstaller/.InstallAppProgress (has extras) } from pid 12905 03-31 15:20:01.241 I/LAB126 ( 1607): StatusBarService hears intent. action: com.lab126.intent.TOP_WINDOW_CHANGED 03-31 15:20:01.241 I/LAB126 ( 1607): window changed 03-31 15:20:01.343 D/dalvikvm(12776): GC_CONCURRENT freed 275K, 62% free 2872K/7367K, external 847K/1181K, paused 2ms+2ms 03-31 15:20:01.390 D/dalvikvm(12776): GC_EXPLICIT freed 114K, 62% free 2869K/7367K, external 847K/1181K, paused 26ms 03-31 15:20:01.390 W/ActivityManager( 1397): No content provider found for: null 03-31 15:20:01.405 I/ActivityManager( 1397): Displayed com.android.packageinstaller/.InstallAppProgress: +415ms 03-31 15:20:01.429 D/PackageParser( 1397): Scanning package: /data/app/vmdl-927475766.tmp 03-31 15:20:01.429 W/ActivityManager( 1397): No content provider found for: null 03-31 15:20:01.616 D/dalvikvm( 1397): GC_CONCURRENT freed 1885K, 48% free 7088K/13383K, external 4564K/5699K, paused 3ms+5ms 03-31 15:20:01.632 D/PackageManager( 1397): Scanning package org.aprsdroid.app 03-31 15:20:01.632 E/PackageManager( 1397): Package org.aprsdroid.app requires unavailable shared library com.google.android.maps; failing! 03-31 15:20:01.632 W/PackageManager( 1397): Package org.aprsdroid.app couldn't be installed. 03-31 15:20:01.694 D/dalvikvm( 1397): GC_EXPLICIT freed 274K, 48% free 7021K/13383K, external 4564K/5699K, paused 68ms 03-31 15:20:03.546 I/InstallAppProgress(12905): Finished installing org.aprsdroid.app

ge0rg commented 12 years ago

You will need that shared package to use APRSdroid with GMaps. The older OSM version also demands that package, even though it is not required. I have fixed this in the latest APK. Please test and report back!

rct commented 12 years ago

Thank you for following up:

The good news is that the 2012-04-08_osm.apk is now installable on the Kindle Fire.

The app starts up and runs.

The bad news is that it isn't very functional due to what I think are quirks with the kindle version of android 2.x. I can't correctly enter the Latitude and Longitude manually - when try to enter into that text field, there is a numeric style keypad instead of the full keyboard. However the '.' and '-' buttons don't work. I've seen this behavior in another application, Keep Track Pro, so I don't believe it's anything particular to APRSdroid.

The location method to use the GPS/Cellular network doesn't work. Some applications like MapQuest are able to use the wifi/IP based location services to get the current position. The side-loaded google maps doesn't seem to be currently able to do this either, though I thought I tested that was working when I first side-loaded the app.

In any case, thank you for your efforts. I wanted to give you the info. I don't expect you to spend time getting this limited platform to work.

Thanks, --Rob

ge0rg commented 12 years ago

I see several options to get around the issue:

rct commented 12 years ago

I had originally tried 'use Periodic GPS/Network location with "network location" enabled.' It never sends (or receives any packets). When I click 'single shot' it turns on the APRS service and just stays that way.

I've got the log, I'm not sure how much is relevant.

I will try the copy/paste idea to see if I can copy & paste in the coordinates to see how well that works.

04-10 14:26:02.646 D/LAB126 ( 1459): got menu button softkey click! 04-10 14:26:02.646 D/LAB126 ( 1459): collapse because of menu 04-10 14:26:02.646 D/LAB126 ( 1459): collapse softkeys 04-10 14:26:02.661 W/KeyCharacterMap( 835): No keyboard for id 0 04-10 14:26:02.661 W/KeyCharacterMap( 835): Using default keymap: /system/usr/keychars/qwerty.kcm.bin 04-10 14:26:02.677 D/dalvikvm( 1388): GC_CONCURRENT freed 2050K, 40% free 7462K/12359K, external 6754K/8434K, paused 2ms+5ms 04-10 14:26:02.911 D/dalvikvm( 1388): GC_CONCURRENT freed 2053K, 40% free 7434K/12359K, external 6754K/8434K, paused 2ms+5ms 04-10 14:26:03.013 D/dalvikvm( 1388): GC_FOR_MALLOC freed 1516K, 40% free 7421K/12359K, external 6754K/8434K, paused 65ms 04-10 14:26:03.083 D/dalvikvm( 1388): GC_FOR_MALLOC freed 1115K, 41% free 7396K/12359K, external 6754K/8434K, paused 62ms 04-10 14:26:03.255 D/dalvikvm( 1388): GC_CONCURRENT freed 2009K, 40% free 7435K/12359K, external 6754K/8434K, paused 2ms+5ms 04-10 14:26:03.427 D/dalvikvm( 1388): GC_CONCURRENT freed 2000K, 40% free 7469K/12359K, external 6754K/8434K, paused 3ms+5ms 04-10 14:26:03.529 D/dalvikvm( 1388): GC_FOR_MALLOC freed 1653K, 41% free 7396K/12359K, external 6754K/8434K, paused 64ms 04-10 14:26:03.599 D/dalvikvm( 1388): GC_FOR_MALLOC freed 1116K, 41% free 7396K/12359K, external 6754K/8434K, paused 61ms 04-10 14:26:03.677 D/dalvikvm( 1388): GC_FOR_MALLOC freed 1117K, 40% free 7422K/12359K, external 6754K/8434K, paused 61ms 04-10 14:26:06.310 D/ActivityManager( 1388): Starting: Intent { cmp=org.aprsdroid.app/.ConversationsActivity } from pid 835 04-10 14:26:06.372 I/LAB126 ( 1459): StatusBarService hears intent. action: com.lab126.intent.TOP_WINDOW_CHANGED 04-10 14:26:06.372 I/LAB126 ( 1459): window changed 04-10 14:26:06.552 I/ActivityManager( 1388): Displayed org.aprsdroid.app/.ConversationsActivity: +240ms 04-10 14:26:08.474 D/LAB126 ( 1459): got back button softkey click! 04-10 14:26:08.474 D/LAB126 ( 1459): collapse because of back button 04-10 14:26:08.474 D/LAB126 ( 1459): collapse softkeys 04-10 14:26:08.529 I/LAB126 ( 1459): StatusBarService hears intent. action: com.lab126.intent.TOP_WINDOW_CHANGED 04-10 14:26:08.529 I/LAB126 ( 1459): window changed 04-10 14:26:09.818 D/LAB126 ( 1459): got back button softkey click! 04-10 14:26:09.818 D/LAB126 ( 1459): collapse because of back button 04-10 14:26:09.818 D/LAB126 ( 1459): collapse softkeys 04-10 14:26:09.927 W/ActivityManager( 1388): Unable to start service Intent { act=appStartup }: not found 04-10 14:26:10.013 W/IInputConnectionWrapper( 835): showStatusIcon on inactive InputConnection 04-10 14:26:10.154 I/LAB126 ( 1459): StatusBarService hears intent. action: com.lab126.intent.TOP_WINDOW_CHANGED 04-10 14:26:10.154 I/LAB126 ( 1459): window changed 04-10 14:26:10.333 I/ActivityManager( 1388): No longer want com.audible.application.kindle (pid 6265): hidden #16 04-10 14:26:11.536 D/ActivityManager( 1388): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 pkg=org.aprsdroid.app cmp=org.aprsdroid.app/.APRSdroid } from pid 11933 04-10 14:26:11.614 D/ActivityManager( 1388): Starting: Intent { flg=0x20000000 cmp=org.aprsdroid.app/.LogActivity } from pid 835 04-10 14:26:11.614 I/LAB126 ( 1459): StatusBarService hears intent. action: com.lab126.intent.TOP_WINDOW_CHANGED 04-10 14:26:11.614 I/LAB126 ( 1459): window changed 04-10 14:26:11.614 I/LAB126 ( 1459): don't set softkey config for 'Starting...' window 04-10 14:26:11.638 D/APRSdroid.Log( 835): starting APRSdroid 1.2.0-9-g91c5b6c 2012-04-08 04-10 14:26:11.724 I/LAB126 ( 1459): StatusBarService hears intent. action: com.lab126.intent.TOP_WINDOW_CHANGED 04-10 14:26:11.724 I/LAB126 ( 1459): window changed 04-10 14:26:11.779 I/ActivityManager( 1388): Displayed org.aprsdroid.app/.LogActivity: +155ms (total +176ms) 04-10 14:26:13.568 D/LAB126 ( 1459): collapsing softkeys because of collapse button. 04-10 14:26:13.568 D/LAB126 ( 1459): collapse softkeys 04-10 14:26:15.224 D/LAB126 ( 1459): got menu button softkey click! 04-10 14:26:15.224 D/LAB126 ( 1459): collapse because of menu 04-10 14:26:15.224 D/LAB126 ( 1459): collapse softkeys 04-10 14:26:17.630 D/APRSdroid.Service( 835): onStartCommand: Intent { act=org.aprsdroid.app.ONCE cmp=org.aprsdroid.app/.AprsService }, 2, 1 04-10 14:26:17.630 D/getLII ( 835): periodic 04-10 14:26:17.630 D/getLII ( 835): values: smartbeaconing periodic manual 04-10 14:26:17.630 D/getLIN ( 835): id is 1 04-10 14:26:17.630 D/getLII ( 835): tcp 04-10 14:26:17.630 D/getLII ( 835): values: tcp udp http afsk bluetooth 04-10 14:26:17.630 D/getLIN ( 835): id is 0 04-10 14:26:17.716 D/APRSdroid.Service( 835): addPost: null - APRS Service single shot: Periodic GPS/Network Position, TCP connection. 04-10 14:26:17.716 D/APRSdroid.TcpUploader( 835): TcpUploader.createConnection: euro.aprs2.net:14580 04-10 14:26:17.716 D/APRSdroid.TcpSocketThread( 835): TcpSocketThread.run() 04-10 14:26:17.716 D/APRSdroid.TcpSocketThread( 835): init_socket() 04-10 14:26:17.724 W/InputManagerService( 1388): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@40843198 04-10 14:26:17.732 D/IconMerger( 1459): notification for com.amazon.venezia (1) 04-10 14:26:17.732 D/IconMerger( 1459): notification for com.seasmind.android.gmappmgr (1) 04-10 14:26:17.732 D/IconMerger( 1459): notification for org.aprsdroid.app (1) 04-10 14:26:17.732 D/IconMerger( 1459): notification for com.accuweather.amazon.android (1) 04-10 14:26:17.732 D/IconMerger( 1459): sum of notifications: 4 04-10 14:26:17.849 D/APRSdroid.TcpSocketThread( 835): user W2RCT-5 pass 0000 vers APRSdroid 1.2.0-9-g91c5b6c filter m/50 04-10 14:26:17.849 D/APRSdroid.TcpSocketThread( 835): init_socket() done 04-10 14:26:17.849 D/APRSdroid.TcpSocketThread( 835): waiting for data... 04-10 14:26:17.849 D/APRSdroid.Service( 835): onPosterStarted 04-10 14:26:17.849 D/FAILGPS ( 835): best. provider. ever. network 04-10 14:26:17.857 D/APRSdroid.PeriodicGPS( 835): onProviderDisabled: network 04-10 14:26:17.857 D/APRSdroid.PeriodicGPS( 835): onProviderDisabled: network 04-10 14:26:17.872 D/IconMerger( 1459): notification for com.amazon.venezia (1) 04-10 14:26:17.872 D/IconMerger( 1459): notification for com.seasmind.android.gmappmgr (1) 04-10 14:26:17.872 D/IconMerger( 1459): notification for org.aprsdroid.app (1) 04-10 14:26:17.872 D/IconMerger( 1459): notification for com.accuweather.amazon.android (1) 04-10 14:26:17.872 D/IconMerger( 1459): sum of notifications: 4 04-10 14:26:17.974 D/APRSdroid.TcpSocketThread( 835): recv: # javAPRSSrvr 3.15b08 04-10 14:26:17.982 D/APRSdroid.TcpSocketThread( 835): recv: # logresp W2RCT-5 verified, server T2KRAKOW, adjunct "filter m/50" OK - Filter definition updated 04-10 14:26:20.864 D/MyService( 5673): Start Handler 04-10 14:26:28.130 D/LAB126 ( 1459): got menu button softkey click! 04-10 14:26:28.130 D/LAB126 ( 1459): collapse because of menu 04-10 14:26:28.130 D/LAB126 ( 1459): collapse softkeys 04-10 14:26:31.271 D/ActivityManager( 1388): Starting: Intent { cmp=org.aprsdroid.app/.HubActivity } from pid 835 04-10 14:26:31.489 I/LAB126 ( 1459): StatusBarService hears intent. action: com.lab126.intent.TOP_WINDOW_CHANGED 04-10 14:26:31.489 I/LAB126 ( 1459): window changed 04-10 14:26:31.677 I/ActivityManager( 1388): Displayed org.aprsdroid.app/.HubActivity: +386ms 04-10 14:26:33.818 D/APRSdroid.Service( 835): onStartCommand: Intent { act=org.aprsdroid.app.ONCE cmp=org.aprsdroid.app/.AprsService }, 2, 2 04-10 14:26:33.818 D/getLII ( 835): periodic 04-10 14:26:33.818 D/getLII ( 835): values: smartbeaconing periodic manual 04-10 14:26:33.818 D/getLIN ( 835): id is 1 04-10 14:26:33.818 D/getLII ( 835): tcp 04-10 14:26:33.818 D/getLII ( 835): values: tcp udp http afsk bluetooth 04-10 14:26:33.825 D/getLIN ( 835): id is 0 04-10 14:26:33.935 D/dalvikvm( 835): GC_CONCURRENT freed 661K, 63% free 3491K/9351K, external 1153K/1641K, paused 5ms+13ms 04-10 14:26:33.950 D/APRSdroid.Service( 835): addPost: null - APRS Service single shot: Periodic GPS/Network Position, TCP connection. 04-10 14:26:33.958 D/APRSdroid.Service( 835): onPosterStarted 04-10 14:26:33.958 D/FAILGPS ( 835): best. provider. ever. network 04-10 14:26:33.989 D/APRSdroid.PeriodicGPS( 835): onProviderDisabled: network 04-10 14:26:33.989 D/APRSdroid.PeriodicGPS( 835): onProviderDisabled: network 04-10 14:26:34.013 D/IconMerger( 1459): notification for com.amazon.venezia (1) 04-10 14:26:34.029 D/IconMerger( 1459): notification for com.seasmind.android.gmappmgr (1) 04-10 14:26:34.029 D/IconMerger( 1459): notification for org.aprsdroid.app (1) 04-10 14:26:34.029 D/IconMerger( 1459): notification for com.accuweather.amazon.android (1) 04-10 14:26:34.029 D/IconMerger( 1459): sum of notifications: 4 04-10 14:26:34.130 D/IconMerger( 1459): notification for com.amazon.venezia (1) 04-10 14:26:34.130 D/IconMerger( 1459): notification for com.seasmind.android.gmappmgr (1) 04-10 14:26:34.130 D/IconMerger( 1459): notification for org.aprsdroid.app (1) 04-10 14:26:34.130 D/IconMerger( 1459): notification for com.accuweather.amazon.android (1) 04-10 14:26:34.130 D/IconMerger( 1459): sum of notifications: 4 04-10 14:26:36.786 D/APRSdroid.TcpSocketThread( 835): shutdown() 04-10 14:26:36.786 D/APRSdroid.TcpSocketThread( 835): catchLog(shutdownInput) 04-10 14:26:36.786 D/APRSdroid.TcpSocketThread( 835): catchLog(shutdownOutput) 04-10 14:26:36.786 D/APRSdroid.TcpSocketThread( 835): catchLog(socket.close) 04-10 14:26:36.786 D/APRSdroid.TcpSocketThread( 835): TcpSocketThread.terminate() 04-10 14:26:36.786 D/IconMerger( 1459): notification for com.amazon.venezia (1) 04-10 14:26:36.786 D/IconMerger( 1459): notification for com.seasmind.android.gmappmgr (1) 04-10 14:26:36.786 D/IconMerger( 1459): notification for com.accuweather.amazon.android (1) 04-10 14:26:36.786 D/IconMerger( 1459): sum of notifications: 3 04-10 14:26:36.841 D/APRSdroid.Service( 835): addPost: null - APRS Service stopped. 04-10 14:26:40.513 D/LAB126 ( 1459): collapse softkeys 04-10 14:26:40.513 D/ActivityManager( 1388): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10200000 cmp=com.amazon.kindle.otter/.Launcher } from pid 1388 04-10 14:26:40.575 W/ActivityManager( 1388): Unable to start service Intent { act=appStartup }: not found 04-10 14:26:40.794 I/LAB126 ( 1459): StatusBarService hears intent. action: com.lab126.intent.TOP_WINDOW_CHANGED 04-10 14:26:40.794 I/LAB126 ( 1459): window changed 04-10 14:26:42.880 D/ActivityManager( 1388): Starting: Intent { act=com.amazon.kindle.otter.action.internal.SHOW_APPS cmp=com.amazon.kindle.otter/.AppsLibraryActivity } from pid 11933 04-10 14:26:43.122 I/LAB126 ( 1459): StatusBarService hears intent. action: com.lab126.intent.TOP_WINDOW_CHANGED 04-10 14:26:43.122 I/LAB126 ( 1459): window changed 04-10 14:26:47.357 D/dalvikvm( 1388): GC_CONCURRENT freed 1911K, 40% free 7464K/12359K, external 6754K/8434K, paused 3ms+6ms 04-10 14:26:52.904 V/DeviceStorageMonitorService( 1388): mTotalMemory is 11734999 04-10 14:27:04.060 D/dalvikvm( 1388): GC_CONCURRENT freed 2067K, 40% free 7432K/12359K, external 6754K/8434K, paused 3ms+5ms 04-10 14:27:04.294 D/dalvikvm( 1388): GC_CONCURRENT freed 2018K, 40% free 7426K/12359K, external 6754K/8434K, paused 3ms+6ms 04-10 14:27:04.474 D/dalvikvm( 1388): GC_CONCURRENT freed 1985K, 40% free 7432K/12359K, external 6754K/8434K, paused 2ms+5ms 04-10 14:27:04.685 D/dalvikvm( 1388): GC_CONCURRENT freed 2053K, 40% free 7426K/12359K, external 6754K/8434K, paused 3ms+5ms 04-10 14:27:04.880 D/dalvikvm( 1388): GC_CONCURRENT freed 2047K, 40% free 7426K/12359K, external 6754K/8434K, paused 2ms+5ms 04-10 14:27:04.958 D/dalvikvm( 1388): GC_FOR_MALLOC freed 1178K, 40% free 7416K/12359K, external 6754K/8434K, paused 63ms 04-10 14:27:05.029 D/dalvikvm( 1388): GC_FOR_MALLOC freed 1116K, 41% free 7391K/12359K, external 6754K/8434K, paused 61ms 04-10 14:27:05.208 D/dalvikvm( 1388): GC_CONCURRENT freed 2010K, 40% free 7429K/12359K, external 6754K/8434K, paused 2ms+5ms 04-10 14:27:05.380 D/dalvikvm( 1388): GC_CONCURRENT freed 2026K, 40% free 7438K/12359K, external 6754K/8434K, paused 3ms+4ms 04-10 14:27:05.482 D/dalvikvm( 1388): GC_FOR_MALLOC freed 1624K, 40% free 7416K/12359K, external 6754K/8434K, paused 65ms 04-10 14:27:05.560 D/dalvikvm( 1388): GC_FOR_MALLOC freed 1116K, 40% free 7416K/12359K, external 6754K/8434K, paused 62ms 04-10 14:27:05.630 D/dalvikvm( 1388): GC_FOR_MALLOC freed 1116K, 40% free 7416K/12359K, external 6754K/8434K, paused 61ms 04-10 14:27:13.646 D/ActivityManager( 1388): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 pkg=com.xtralogic.android.logcollector cmp=com.xtralogic.android.logcollector/.SendLogActivity } from pid 11933 04-10 14:27:13.685 I/ActivityManager( 1388): Start proc com.xtralogic.android.logcollector for activity com.xtralogic.android.logcollector/.SendLogActivity: pid=6874 uid=10086 gids={1007, 1015} 04-10 14:27:14.029 I/LAB126 ( 1459): StatusBarService hears intent. action: com.lab126.intent.TOP_WINDOW_CHANGED 04-10 14:27:14.029 I/LAB126 ( 1459): window changed 04-10 14:27:14.193 I/ActivityManager( 1388): Displayed com.xtralogic.android.logcollector/.SendLogActivity: +509ms 04-10 14:27:20.294 D/dalvikvm( 6874): GC_EXTERNAL_ALLOC freed 83K, 49% free 2777K/5379K, external 1088K/1181K, paused 24ms 04-10 14:27:20.427 D/dalvikvm( 6874): GC_CONCURRENT freed 490K, 51% free 2973K/5959K, external 1284K/1754K, paused 2ms+2ms 04-10 14:27:20.458 D/dalvikvm( 6874): GC_FOR_MALLOC freed 293K, 49% free 3049K/5959K, external 1284K/1754K, paused 25ms

On 4/10/2012 12:49 PM, Georg Lukas wrote:

I see several options to get around the issue:

  • write the coordinates in some other app and use copy&paste
  • get a different keyboard installed
  • use Periodic GPS/Network location with "network location" enabled.
  • try bluegps4droid with a Bluetooth GPS dongle

Reply to this email directly or view it on GitHub: https://github.com/ge0rg/aprsdroid/issues/34#issuecomment-5050450

ge0rg commented 12 years ago

I suppose for network location to actually work you will also need some magic backend library from Google. This is a code path that is not that well tested in APRSdroid, but I wanted to give it a try :-)

rct commented 12 years ago

On 4/10/2012 12:49 PM, Georg Lukas wrote:

I see several options to get around the issue:

  • write the coordinates in some other app and use copy&paste

FYI, this approach worked. I was able to send a beacon, and start receiving beacons for nearby stations.