Jump to content

[TOPIC: topicViewTemplate]
[GLOBAL: userSmallPhoto]
Photo

Cannot get GPS on iPhone (works on Android)
Started by dmarques42 Jul 14 2015 12:15 PM

2 replies to this topic
gps ios
[TOPIC CONTROLS]
This topic has been archived. This means that you cannot reply to this topic.
[/TOPIC CONTROLS]
[modOptionsDropdown]
[/modOptionsDropdown]
[reputationFilter]
[TOPIC: post.html]
#1

dmarques42

[GLOBAL: userInfoPane.html]
dmarques42
  • Enthusiast

  • 51 posts
  • Corona SDK

I am unable to get GPS on iPhones, but works fine on Android (and on simulator). I get a blank error code. I use the sample code in the documentation, and have tried waiting as long as 300 secs.

 

My code:

 

function locationHandler( event )

    local currentLocation = myMap:getUserLocation()
    -- table.insert(messages,"requested location")

    if ( currentLocation.errorCode or ( currentLocation.latitude == 0 and currentLocation.longitude == 0 ) ) then
        errorText.text = currentLocation.errorMessage

        attempts = attempts + 1

        if ( attempts > 10 ) then
            table.insert(messages,currentLocation.errorMessage)
            -- native.showAlert( "No GPS Signal", "Can't sync with GPS.", { "OK" } )
        else
            timer.performWithDelay( 1000, locationHandler )
        end
        table.insert(messages,"Error getting location: "..errorText.text)
    else
        table.insert(messages,"Have position: "..currentLocation.longitude)
        haveLong = true
        latitude = string.format( '%0.4f', currentLocation.latitude)
        lat.text = string.format( '%0.4f', currentLocation.latitude)
        longitude = string.format( '%0.4f', currentLocation.longitude)
        long.text = string.format( '%0.4f', currentLocation.longitude)
    end
end
 

The table.insert is my app message queue. What happens is that every second I get a message "Error getting location: " and the errorText.text is blank (currentLocation.errorMessage is nil).

 

The map I use is a dummy, I don't actually need the map, and set it off-screen.

 

local myMap = native.newMapView( -1, -1, 1, 1 )
 

When I install the app and start it the first time, the iPhone asks for permission to use GPS. I grant permission.

 

My build.settings contains:

 

    --
    -- iOS Section
    --
    iphone =
    {
        plist =
        {
            UIStatusBarHidden = false,
            UIPrerenderedIcon = true, -- set to false for "shine" overlay
            --UIApplicationExitsOnSuspend = true, -- uncomment to quit app on suspend
            NSLocationWhenInUseUsageDescription = "Optimizer needs your location to get your signal.",
 

I have verified that the 2 iPhones I have tested have GPS on, and they work fine with an html5 version of the program through Safari.

 

What am I missing?



[TOPIC: post.html]
#2

dmarques42

[GLOBAL: userInfoPane.html]
dmarques42
  • Enthusiast

  • 51 posts
  • Corona SDK

I did not fix the above problem, but I did find a simpler solution that works on iOS.

 

function locationHandler( event )

    if event.errorCode then
        table.insert(messages, "GPS returned "..event.errorCode)
        native.showAlert("No GPS","Unable to get GPS location data.", {"OK"})
    else
        table.insert( messages,"Have position: "..string.format( '%0.4f',event.longitude) )
        haveLong = true
        latitude = string.format( '%0.4f', event.latitude)
        lat.text = string.format( '%0.4f', event.latitude)
        longitude = string.format( '%0.4f', event.longitude)
        long.text = string.format( '%0.4f', event.longitude)
    end

end
 

Then, instead of getUserLocation(), I just used:

 

Runtime:addEventListener( "location", locationHandler )

 

That works well and efficiently on all.



[TOPIC: post.html]
#3

Rob Miracle

[GLOBAL: userInfoPane.html]
Rob Miracle
  • Moderator

  • 25,544 posts
  • Enterprise

I don't believe it will work with an off screen map.

 

Rob




[topic_controls]
[/topic_controls]