Desde hace poco me he estado enfrentando a un problema de permisos que afecta al colocar el android:targetSdkVersion sobre SDK 23+, estuve leyendo el tutorial de @Erel sobre los Runtime Permissions aunque no logre entender al 100%, así que realice una consulta sobre este tema en el foro en ingles, lo cual me ayudaron a entender como funcionaban los permisos en android 6 hacia arriba.
Bueno sin mas vueltas les comparto un pequeño código que da permisos para acceder al almacenamiento externo de nuestro teléfono, este ejemplo carga una imagen que esta almacenada en la carpeta Download, que se encuentra en la memoria externa de todos los android.
* Usar la librería RuntimePermissions
Primero que nada en Manifest Editor establecer android:targetSdkVersion="23" como muestra el código de ejemplo
Ahora en nuestro Activity Main nuestro código quedaría de la siguiente manera.
Este código lo pueden mejorar y probar diferentes permisos, en este caso solo se prueba el permiso para poder acceder al almacenamiento externo.
Si tienen dudas de como funciona dejen sus preguntas, estaré encantado de poder ayudarlos.
Bueno sin mas vueltas les comparto un pequeño código que da permisos para acceder al almacenamiento externo de nuestro teléfono, este ejemplo carga una imagen que esta almacenada en la carpeta Download, que se encuentra en la memoria externa de todos los android.
* Usar la librería RuntimePermissions
Primero que nada en Manifest Editor establecer android:targetSdkVersion="23" como muestra el código de ejemplo
B4X:
'This code will be applied to the manifest file during compilation.
'You do not need to modify it in most cases.
'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136
AddManifestText(
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23"/>
<supports-screens android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"/>)
SetApplicationAttribute(android:icon, "@drawable/icon")
SetApplicationAttribute(android:label, "$LABEL$")
'End of default text.
Ahora en nuestro Activity Main nuestro código quedaría de la siguiente manera.
B4X:
Sub Process_Globals
Dim rp As RuntimePermissions
Dim sdcardEnabled As Boolean
End Sub
Sub Globals
Private ImageView1 As ImageView
End Sub
Sub Activity_Create(FirstTime As Boolean)
'Activity.LoadLayout("Layout1")
sdcardEnabled = False
End Sub
Sub Activity_Resume
If sdcardEnabled = False Then
rp.CheckAndRequest(rp.PERMISSION_WRITE_EXTERNAL_STORAGE)
End If
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub Activity_PermissionResult (Permission As String, Result As Boolean)
If Permission = rp.PERMISSION_WRITE_EXTERNAL_STORAGE Then
If Result Then
sdcardEnabled = True 'Gracias a bgsoft por corregir esta linea.
Log("You NOW can write to File.DirRootExternal")
'File.WriteString(File.DirRootExternal, "String.txt", _
'"This is some string" & CRLF & "and this is another one.")
MuestraImagen
End If
End If
End Sub
Sub MuestraImagen
ImageView1.Initialize("ImageView1")
ImageView1.Bitmap = LoadBitmap(File.DirRootExternal & "/Download", "alexandra.gif" )
ImageView1.Gravity = Gravity.FILL
Activity.AddView(ImageView1,10dip, 10dip, 100%x, 100%y)
End Sub
Este código lo pueden mejorar y probar diferentes permisos, en este caso solo se prueba el permiso para poder acceder al almacenamiento externo.
Si tienen dudas de como funciona dejen sus preguntas, estaré encantado de poder ayudarlos.
Last edited: