Spanish [SOLUCIONADO]Error de Maps Raro

TheFalcon

Active Member
Licensed User
Longtime User
Buenas, pongo en situación. Tengo una aplicación que al abrirla por primera vez te dice que tienes que darle permiso GPS y activarlo, hasta hay todo bien.

Luego cuando Pasas a otro Activity, en el cual se muestra el Mapa, al Iniciar el Activity, Me pide (Permitir usar ubicación mientras usas dispositivo, etc etc.)

Durante ESE MENSAJE y sin escoger nada , el DEBUG me arroja este error

B4X:
--------- beginning of crash
java.lang.RuntimeException: java.lang.SecurityException: my location requires permission ACCESS_FINE_LOCATION or ACCESS_COARSE_LOCATION
    at anywheresoftware.b4a.objects.MapFragmentWrapper$1.onMapReady(MapFragmentWrapper.java:196)

Cuando Escojo una Opción , la aplicación se cierra, EN NINGUN MOMENTO el usuario ve el error , pero se le cierra la aplicación, y al abrirla funciona todo sin problemas, no se por que :/

En el activity conforme arranca la aplicación tengo
B4X:
Starter.GPS.Initialize("GPS")
    If Starter.GPS.GPSEnabled = False Then
        ToastMessageShow("Debe Activar el GPS del Equipo.", True)
        StartActivity(Starter.GPS.LocationSettingsIntent) 'Will open the relevant settings screen.
    Else
        'Starter.GPS.Start(0, 0)  ' quito esto por que antes era GPS.Start(0, 0)
        'pero ahora como lo meto en starter ya no em hace falta y me daba error   
                '    StartActivity(GoogleMaps)
    End If

En la siguiente ACTIViTY que es la que tiene el mapa y en la cual al hacerme la pregunta da ese error tengo


ESTO LO TENGO EN EL ACTIVITY CREATE
B4X:
 If MapFragment1.IsGooglePlayServicesAvailable = False Then
        ToastMessageShow("Por Favor instala los Servicios de Google Play.", True)
    End If
    
    rp.CheckAndRequest(rp.PERMISSION_ACCESS_FINE_LOCATION)
    'Starter.GPS.Initialize("GPS")
    'Boton velocidad'
    boton1.Initialize(0)

    

    '---------VERSION  8.1.6   NUEVOS DATOS GOOGLE MAPS
    Wait For MapFragment1_Ready
    gmap = MapFragment1.GetMap
    rp.CheckAndRequest(rp.PERMISSION_ACCESS_FINE_LOCATION)
    Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
    If Result Then
        gmap.MyLocationEnabled = True
    Else
        Log("No permission!")
    End If

ESTO EN EL CODIGO EN GENERAL

B4X:
#Region "GPS"

Sub MapFragment1_Ready
    gmap = MapFragment1.GetMap
 
    Dim JavaMapsObject As JavaObject
    JavaMapsObject = gmap.GetUiSettings
    JavaMapsObject.RunMethod("setMapToolbarEnabled", Array As Object(True))
    

    Dim cp As CameraPosition
    cp.Initialize(40.416660 , -3.703770, 10) ' le pongo el kilometro cero de madrid, me da error si lodesactivo.
    
    gmap.AnimateCamera(cp)


End Sub


Sub GPS_LocationChanged (Parametro As Location)
    
    
    
    Dim sp As Int
    sp = Ceil(Parametro.Speed * 3.6)
    boton1.Text = sp &" "&"km/h"
    latitud = Parametro.Latitude
    Longitud = Parametro.Longitude
    p2.Initialize2(latitud,Longitud)
    p1.Initialize2(Lat2, Lon2)
    Distance  = p1.DistanceTo(p2)
    If latitud <> 0 And Longitud <> 0 Then
        
        If Distance > 10 Then
            Lat2 = latitud
            Lon2 = Longitud
            Dim cp As CameraPosition
        '    cp.Initialize2(Parametro.Latitude, Parametro.Longitude, gmap.CameraPosition.Zoom, Parametro.Bearing, 0)
            cp.Initialize2(Parametro.Latitude, Parametro.Longitude, 15, Parametro.Bearing, 0)
            gmap.AnimateCamera(cp)
        End If
        
        satelite.Bitmap = LoadBitmap(File.DirAssets, "s_on.png") ' si latitud o longitud es + de 0. pone el radar verde
    Else
        
        satelite.Bitmap = LoadBitmap(File.DirAssets, "s_off.png") ' si latitud o longitud es 0. pone el radar rojo
    
        Dim cp As CameraPosition
        '    cp.Initialize2(Parametro.Latitude, Parametro.Longitude, gmap.CameraPosition.Zoom, Parametro.Bearing, 0)
        cp.Initialize2(Parametro.Latitude, Parametro.Longitude, 15, Parametro.Bearing, 0)
        gmap.AnimateCamera(cp)
    End If
    
    
End Sub



Public Sub GpsStatus (Satellites As List)

    Dim sb As StringBuilder
    sb.Initialize
    sb.Append("Satellites:").Append(CRLF)
    For i = 0 To Satellites.Size - 1
        Dim Satellite As GPSSatellite = Satellites.Get(i)
        sb.Append(CRLF).Append(Satellite.Prn).Append($" $1.2{Satellite.Snr}"$).Append(" ").Append(Satellite.UsedInFix)
        sb.Append(" ").Append($" $1.2{Satellite.Azimuth}"$).Append($" $1.2{Satellite.Elevation}"$)
    Next
End Sub

Sub Activity_Resume
    If Starter.GPS.GPSEnabled = False Then
        ToastMessageShow("Por Favor, Activa el GPS.", True)
        StartActivity(Starter.GPS.LocationSettingsIntent) 'Will open the relevant settings screen.
    Else
        Starter.rp.CheckAndRequest(Starter.rp.PERMISSION_ACCESS_FINE_LOCATION)
        Wait For Activity_PermissionResult (Permission As String, Result As Boolean)
        If Result Then CallSubDelayed(Starter, "StartGPS")
        
        
    End If
    
End Sub

Sub Activity_Pause (UserClosed As Boolean)
    CallSubDelayed(Starter, "StopGPS")
End Sub

#End Region


como ya digo, al cliente final el único error que aprecia es que se le cierra la aplicación al escoger mantener gps o otra. pero me tiene desconcertado, creo que es por que llamo en varios activitys al maps, pero no doy con la tecla.

Gracias
 

josejad

Expert
Licensed User
Longtime User
Pulsa en la ventana de Log el botón "Lista de Permisos".
Si no te aparecen ahí ACCESS_FINE_LOCATION ni ACCESS_COARSE_LOCATION, no puedes pedir permiso para ello.
¿Qué tienes en el manifest?

De este hilo:
Not many are aware to the fact that you can see the project permissions by clicking on the List Permissions button that is inside the Logs tab:
A very common mistake is to request a permission at runtime that is not listed in the "permissions dialog". It will not work. (Un error muy común es solicitar un permiso en tiempo de ejecución que no está listado en el "diálogo de permisos". No funcionará)
 

TheFalcon

Active Member
Licensed User
Longtime User
Pulsa en la ventana de Log el botón "Lista de Permisos".
Si no te aparecen ahí ACCESS_FINE_LOCATION ni ACCESS_COARSE_LOCATION, no puedes pedir permiso para ello.
¿Qué tienes en el manifest?

De este hilo:

Buenas Jose , Feliz año qeu llevo tiempo sin leerte jaja.

con respecto al mapa en el Manifest tengo

B4X:
'*****************google maps
AddApplicationText(
<meta-data
  android:name="com.google.android.geo.API_KEY"
  android:value="AIz***************"/>
  <meta-data android:name="com.google.android.gms.version"
   android:value="@integer/google_play_services_version" />
)
AddApplicationText(
<uses-library
      android:name="org.apache.http.legacy"
      android:required="false" />
)

AddManifestText(<uses-feature android:name="android.hardware.location.gps"/>)



Con respecto a la lista de permisos del Log

imagen.png
 

josejad

Expert
Licensed User
Longtime User
Hey TheFalcon, feliz año para tí también malagueño, que nos tienes muy abandonados.

Echa un ojo también a que en el diseñador no tengas "My Location Enabled" marcado

Veo que pides permiso dos veces al iniciar la actividad, no? (en la línea 5, antes de que esté listo el mapfragment y en la 15).
¿Has probado a quitar la primera?

Si no, ya no se me ocurre mucho más, quizás puedas poner un pequeño proyecto que de el error para que lo podamos probar.

Y como te diría Erel: ¡ Pásate ya a B4XPages !
 

TheFalcon

Active Member
Licensed User
Longtime User
Por lo visto se ha solucionado, del modo mas estúpido jamás visto, es lo que pasa cuando ya tienes la cabeza bloqueada y no ves con lucidez,
era lo de quitar el Doble permiso, y lo del post que me comentaste, que eso lo Hice.

Quitar del Diseño el My Location Enable, pero como no me funciono ayer, la volví a activar, quitándolo, y con lo de los permisos ya me va.

Que pesadilla mas tonta.

Gracias José como siempre

y lo del B4X PAges, lo tengo que mirar pero es que con el curro no me da la vida ni para programar ??
 
Top