Esto no pretende ser un Tutorial pero si compartir mi experiecia como un humilde aporte en Español y que si pasan por un caso similar no den tan vueltas como yó para encontrar una solución viable.
PROBLEMA
El caso fue que en mi aplicación publicada en Play Store en un momento modifique el archivo manifest con estos valores <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="23"/>
Y resulta que al hacer esto en versiones de Android superior a 6 (Api 23) hay que desarrollar en el código una forma de que el usuario otorgue los permisos (sólo los considerados peligrosos) de forma explicita.
Esto lo explica EREL en aquí
https://www.b4x.com/android/forum/threads/runtime-permissions-android-6-0-permissions.67689/#content
Bien entonces que quede claro que la aplicación toma los permisos del archivo manifest sólo en versiones inferior al android:targetSdkVersion="23".
Un punto importante es que por más que bajemos el android:targetSdkVersion="23"/ a una menor como >> android:targetSdkVersion="22"/ por ejemplo y subamos una nueva versión a Play Store no será autorizado y no se puede volver atrás.
SOLUCIÓN
La solución está en el enlace del vinculo superior que comaprti de EREL pero en mi caso como tengo muchas dificultades en entender las traducciones automáticas del navegador no interpretaba del todo el concepto asi que fui mejorando hasta que el código al final funcionó correctamente.
No es demasiado complicado y seguro que se puede optimizar pero lo comparto tan como lo utilizo..
En mi caso mi app utilizaba 2 permisos considerados como peligrosos que son:
WRITE_EXTERNAL_STORAGE y CALL_PHONE.
Asi que cuando un usuario en un dispositivo con una version de Android 6 o superior intenta hacer un llamado presionando el Botón Lllamar (SendCall) se produce un error y se le brinda un mensaje y se llama a rp.CheckAndRequest(rp.PERMISSION_CALL_PHONE) para que llame al diálogo de solicitar la autorización correspondiente.
Si tu aplicación necesita otros permisos al desatarse el Evento Activity_PermissionResult tambien serán solicitados los otros (como en mi caso el usuario deber habilitar los 2 de los diálogos que lo solicitan)
Bien ojalá sirva de algo este aporte por todo lo que a mi me ayudan los capos de este Foro !!
PROBLEMA
El caso fue que en mi aplicación publicada en Play Store en un momento modifique el archivo manifest con estos valores <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="23"/>
Y resulta que al hacer esto en versiones de Android superior a 6 (Api 23) hay que desarrollar en el código una forma de que el usuario otorgue los permisos (sólo los considerados peligrosos) de forma explicita.
Esto lo explica EREL en aquí
https://www.b4x.com/android/forum/threads/runtime-permissions-android-6-0-permissions.67689/#content
Bien entonces que quede claro que la aplicación toma los permisos del archivo manifest sólo en versiones inferior al android:targetSdkVersion="23".
Un punto importante es que por más que bajemos el android:targetSdkVersion="23"/ a una menor como >> android:targetSdkVersion="22"/ por ejemplo y subamos una nueva versión a Play Store no será autorizado y no se puede volver atrás.
SOLUCIÓN
La solución está en el enlace del vinculo superior que comaprti de EREL pero en mi caso como tengo muchas dificultades en entender las traducciones automáticas del navegador no interpretaba del todo el concepto asi que fui mejorando hasta que el código al final funcionó correctamente.
No es demasiado complicado y seguro que se puede optimizar pero lo comparto tan como lo utilizo..
En mi caso mi app utilizaba 2 permisos considerados como peligrosos que son:
WRITE_EXTERNAL_STORAGE y CALL_PHONE.
Asi que cuando un usuario en un dispositivo con una version de Android 6 o superior intenta hacer un llamado presionando el Botón Lllamar (SendCall) se produce un error y se le brinda un mensaje y se llama a rp.CheckAndRequest(rp.PERMISSION_CALL_PHONE) para que llame al diálogo de solicitar la autorización correspondiente.
B4X:
Sub SendCall(PhoneNumber As String)
Dim p As PhoneCalls
Try
StartActivity(p.Call(PhoneNumber))
Catch
Msgbox("Para poder realizar llamadas debe autorizar permisos en el siguiente diálogo.", "Solicitud de Permisos")
rp.CheckAndRequest(rp.PERMISSION_CALL_PHONE)
End Try
End Sub
Sub Activity_PermissionResult (Permission As String, Result As Boolean)
Log($"Permission: ${Permission}
Result: ${Result}"$)
Select Permission
Case rp.PERMISSION_READ_PHONE_STATE
If Result Then rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
Case rp.PERMISSION_WRITE_EXTERNAL_STORAGE
If Result Then rp.CheckAndRequest(rp.PERMISSION_CALL_PHONE)
Case rp.PERMISSION_CALL_PHONE
If Result Then rp.CheckAndRequest(rp.PERMISSION_ACCESS_FINE_LOCATION)
Case rp.PERMISSION_ACCESS_FINE_LOCATION
If Result Then rp.CheckAndRequest(rp.PERMISSION_READ_EXTERNAL_STORAGE)
Case rp.PERMISSION_READ_EXTERNAL_STORAGE
If Result Then rp.CheckAndRequest(rp.PERMISSION_RECORD_AUDIO)
Case rp.PERMISSION_RECORD_AUDIO
'
End Select
End Sub
Si tu aplicación necesita otros permisos al desatarse el Evento Activity_PermissionResult tambien serán solicitados los otros (como en mi caso el usuario deber habilitar los 2 de los diálogos que lo solicitan)
Bien ojalá sirva de algo este aporte por todo lo que a mi me ayudan los capos de este Foro !!