Spanish Tarjeta externa

mlc

Active Member
Licensed User
Dado que no hay una API específica para conocer el nombre de la tarjeta externa, me he hecho una cutre función.
La he probado en varios dispositivos diferentes y en todos los casos me devuelve el nombre correctamente, peeeero como seguro que no es infalible, os pido si la podeis probar, a ver si entre todos la podemos pulir.
Os dejo el código:
B4X:
Sub Activity_Resume
    Msgbox(SDExterna, "")
End Sub

Sub SDExterna() As String
    'compruebo las posibles ubicaciones de la sd externa
    Dim Externa As String
    Dim posiblesunidades() As String, a As Int, encontrado As Boolean
    posiblesunidades = Array As String("/storage", "/mnt", File.DirRootExternal)
    Dim externas() As String, e As Int
    externas = Array As String("/ext_card", "/external_sd", "/extsd", "/ext_sd", "/external", "/extSdCard", "/externalSdCard", "/sdcard-ext", "/sdcard0", "/sdcard1", "/sdcard2", "/usbcard1")   
   
    For a = 0 To posiblesunidades.Length - 1
        For e = 0 To externas.Length - 1
            If File.Exists(posiblesunidades(a) & externas(e), "") = True Then
                Externa = posiblesunidades(a) & externas(e)
                'compruebo que no sea la misma ruta
                If Externa <> File.DirRootExternal Then
                    Try
                        'ahora compruebo si tienen la misma capacidad y el mismo espacio libre
                        'si son iguales la descarto
                        'la ruta puede ser diferente, pero apuntar a la misma ubicacion.
                        'por ejemplo File.DirRootExternal = /storage/sdcard/0 puede ser igual a /storage/sdcard0
                        'por lo que no sería la externa.
                        Dim os As OperatingSystem
                        os.Initialize("")
                        Dim tt As Long  = os.getFreeBlocks(Externa)                   
                        Dim ttt As Long = os.getBlockCount(Externa)
                        Dim tt1 As Long = os.getFreeBlocks(File.DirRootExternal)                   
                        Dim ttt1 As Long= os.getBlockCount(File.DirRootExternal)
                        If tt <> tt1 AND ttt <> ttt1 Then                   
                            encontrado = True
                            Exit
                        End If
                    Catch
                        Log("")
                    End Try
                Else
                    Externa = ""
                End If
            End If           
        Next
        If encontrado = True Then
            Return Externa           
        End If
    Next
    Return Externa
End Sub
La libreria OsLibrary (24K), la podeis descargar desde aquí:

https://www.b4x.com/android/forum/threads/os-library.11267/

Gracias
 
Top