Spanish [Solucionado]RuntimePermissions siempre true

GonzaloR

Member
Licensed User
Estoy probando la aplicacion en dispositivos con sdk >= 23 y tengo el siguiente codigo
B4X:
If p.SdkVersion >= 23 Then 'Si es android 6 o mayor hay que pedir permisos.
            Dim rp As RuntimePermissions
            ultimoPermiso = ""
            rp.CheckAndRequest(rp.PERMISSION_READ_PHONE_STATE)
            Do While ultimoPermiso.Length = 0
                Sleep(0)
            Loop
            Log(ultimoPermiso & " = " & resultPermiso)
            ultimoPermiso = ""
            rp.CheckAndRequest(rp.PERMISSION_ACCESS_COARSE_LOCATION)
            Do While ultimoPermiso.Length = 0
                Sleep(0)
            Loop
            Log(ultimoPermiso & " = " & resultPermiso)
            If rp.check(rp.PERMISSION_READ_PHONE_STATE) = False Or rp.Check(rp.PERMISSION_ACCESS_COARSE_LOCATION)  = False Then
...........
End If


Sub Activity_PermissionResult (Permission As String, Result As Boolean)
    ultimoPermiso = Permission
    resultPermiso = Result
End Sub

Siempre me devuelve true. Como que tiene los permisos. Pero los permisos se los quito en ajustes, aplicaciones, etc... Entonces mi app da un error y se cierra.
He pensado que RuntimePermissions solo comprueba los permisos en el manifiesto y por ese motivo devuelve siempre true. ¿Puede ser esto?
 

JordiCP

Expert
Licensed User
Longtime User
Creo que no debería, según lo que dice aquí

Nota: A partir de Android 6.0 (nivel de API 23), los usuarios pueden revocar permisos desde cualquier app en cualquier momento, aunque la app esté orientada a un nivel de API inferior. Debes probar tu app para verificar que se comporte correctamente cuando no cuente con un permiso necesario, independientemente del nivel de API al que esté orientada tu app.

¿Sucede lo mismo tanto en debug como en release?
¿Podrías probarlo poniendo el Log en el Sub de PermissionResult?
 

GonzaloR

Member
Licensed User
¿Sucede lo mismo tanto en debug como en release?
¿Podrías probarlo poniendo el Log en el Sub de PermissionResult?

Si, hace lo mismo en debug, release y release ofuscated.
He probado el log en el Sub y sigue saliendo true.
Tambien e probado con dispositivo virtual y fisico.
Mañana seguire a ver que pasa.
 

dar2o3

Active Member
Licensed User
Longtime User
Que versión de Android tiene el dispositivo donde haces las pruebas?
 

dar2o3

Active Member
Licensed User
Longtime User
La ejecución es asíncrona, pon los logs en

B4X:
Sub Activity_PermissionResult (Permission As String, Result As Boolean)
    ultimoPermiso = Permission
    resultPermiso = Result
Log()
End Sub
 

GonzaloR

Member
Licensed User
La ejecución es asíncrona, pon los logs en

B4X:
Sub Activity_PermissionResult (Permission As String, Result As Boolean)
    ultimoPermiso = Permission
    resultPermiso = Result
Log()
End Sub

Pero espero con el siguiente codigo
B4X:
Do While ultimoPermiso.Length = 0
                Sleep(0)
Loop

Aunque tambien he puesto Log en Activity_PermissionResult y hace lo mismo.
 

GonzaloR

Member
Licensed User
Me he dado cuenta que este codigo no espera por la respuesta.
B4X:
Do While ultimoPermiso.Length = 0
                Sleep(0)
Loop
Pero Log en PermissionResult sigue dando true.
 

GonzaloR

Member
Licensed User
Encontre el problema. En el manifiesto tenia targetSdkVersion="19", lo he cambiado por 23 y ya funciona correctamente.
 
Top