|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
   AutoIt (Programación) Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  Teleco - Emisora de A.M. Visual Basic Cosas de Windows Webs interesantes
Translate:
Búsqueda en este sitio:


Nuevo concurso para España, Argentina, Brasil, Chile, Colombia, Ecuador, México, Perú y Portugal.

B4A en español - Juan Antonio Villalpando
(BASIC4Android)

-- Tutorial de B4A --

Volver al índice del tutorial

____________________________

77.- Bajar archivo .zip de Internet. Descomprimirlo. Ver su sitio web offline. Servicios.

Esto trata de bajar un archivo comprimido, jquery.mobile-1.2.1.zip, en este caso es un sitio web comprimido. Una vez bajado se guarda y descomprime automáticamente en la SdCard. Finalmente se navega por el sitio web offline, es decir desde los archivos bajados en la SdCard.

Para realizar este tutorial me voy a basar en la web de jQuery, esta web muestra una plantilla para realizar sitios web. La verdad podría haber tomado un ejemplo más fácil, pero vamos a atrevernos con este.

Primero vamos a ver de qué trata jQuery. Bájate este archivo: jquery.mobile-1.2.1.zip
La versión nueva la puedes bajar de su sitiio: http://jquerymobile.com/download/ pero para hacer las pruebas mejor vamos a bajar la version 1.2.1 que he preparado en mi servidor.

Bájalo a tu ordenador, descomprímelo. Ve a la carpeta jquery.mobile-1.2.1\demos y pulsa sobre el archivo index.html

Navegarás por un sitio web offline realizado con una plantilla, que podrás adaptar a tus necesidades.

jQuery Mobile es la manera más fácil para construir sitios y aplicaciones accesibles desde todos los dispositivos populares como los teléfonos móviles, tablets y ordenadores.

________________________________

Bien pues se trata de hacer eso mismo en el móvil. Lo vamos a realizar en dos pasos

1.- Lo primero bajar el archivo jquery.mobile-1.2.1.zip desde Internet a la SdCard.

Para ello vamos a basarnos en un tutorial de los foros de Basic4Android, concretamente en esta página.

- Debemos marcar las librerías: HTTP y HttpUtils2

- Mediante el Designer creamos un Layout y lo llamamos: 1

- El Layout debe tener un Button llamado: Button1

- Vamos a bajar el susodicho archivo de http://kio4.com/b4a/programas/jquery.mobile-1.2.1.zip

- Lo bajaremos a la Sdcard: /mnt/sdcard

Código del programa en Basic4Android
Sub Process_Globals
    
End Sub

Sub Globals
    Dim Button1 As Button
End Sub Sub Activity_Create(FirstTime As Boolean) Activity.LoadLayout("1") End Sub Sub Activity_Resume 'check if download has finished while the activity was paused If Button1.Enabled = False AND DownloadService.JobStatus = DownloadService.STATUS_DONE Then FinishDownload End If End Sub Sub Activity_Pause (UserClosed As Boolean) End Sub Sub Button1_Click Activity.Color = Colors.Black DownloadService.URL = "http://kio4.com/b4a/programas/jquery.mobile-1.2.1.zip" DownloadService.Target = File.OpenOutput(File.DirRootExternal, "jquery.mobile-1.2.1.zip", False) StartService(DownloadService) Button1.Enabled = False End Sub Sub FinishDownload Button1.Enabled = True DownloadService.JobStatus = DownloadService.STATUS_NONE End Sub

___________________________
- Creación del Servicio.

- Creamos un módulo de servicio mediante Project / Add New Module / Service Module

Lo llamamos DownloadService

y copiamos este código...

Código del Service Module: DownloadService
' Módulo de Servicio
Sub Process_Globals
    Dim HC As HttpClient
    'Activity is expected to set URL
    Dim URL As String
    Dim Target As OutputStream
    Dim JobStatus As Int
    Dim STATUS_NONE, STATUS_WORKING, STATUS_DONE As Int
    STATUS_NONE = 0
    STATUS_WORKING = 1
    STATUS_DONE = 2
    Dim DoneSuccessfully As Boolean
    Dim Notification1 As Notification
End Sub
Sub Service_Create
    HC.Initialize("HC")
    Notification1.Initialize
    Notification1.Icon = "icon" 'use the application icon file for the notification
    Notification1.Vibrate = False
End Sub

Sub Service_Start
    'URL and Target should be set by the calling module
    Dim request As HttpRequest
    request.InitializeGet(URL)
    HC.Execute(request, 1)
    JobStatus = STATUS_WORKING
    Notification1.SetInfo("Servicio de bajada", "Bajando: " & URL, Main)
    Notification1.Sound = False
    'Make sure that the process is not killed during the download
    'This is important if the download is expected to be long.
    'This will also show the status bar notification
    Service.StartForeground(1, Notification1) 
End Sub

Sub HC_ResponseError (Reason As String, StatusCode As Int, TaskId As Int)
    ToastMessageShow("Error en la bajada: " & Reason, True)
    DoneSuccessfully = False
    Finish
End Sub

Sub HC_ResponseSuccess (Response As HttpResponse, TaskId As Int)
    'Asynchronously download the stream
    Response.GetAsynchronously("Response", Target, True, TaskId)
End Sub

Sub Response_StreamFinish (Success As Boolean, TaskId As Int)
    If Success = False Then
        ToastMessageShow("Error en la bajada: " & LastException.Message, True)
    Else
        ToastMessageShow("Bajada correcta.", True)
    End If
    DoneSuccessfully = Success
    Finish
End Sub

Sub Finish
    Log("Servicio de bajada acabado.")
    JobStatus = STATUS_DONE
    'Notify the activity that the download has finished.
    'It will do nothing if the activity is currently paused.
    CallSub(Main, "FinishDownload")
    Service.StopForeground(1) 'Return the service to the "background" (also removes the ongoing notification)
    If IsPaused(Main) Then
        'The activity is paused. The user is probably busy with some other activity.
        'Notify the user that the download has finished
        Notification1.Sound = True
        Notification1.SetInfo("Servicio de bajada", "Bajada completada.", Main)
        Notification1.AutoCancel = True
        Notification1.Notify(1)
    End If
End Sub
Sub Service_Destroy

End Sub

Bien, ya lo tenemos bajado a la SdCard. Lo podemos ver conociendo el tutorial de LINUX en Android que he puesto en otra página.

Entraríamos en adb -e shell
y luego

# cd /mnt/sdcard
# ls -l

Debe haber un archivo llamado jquery.mobile-1.2.1.zip



También observamos el directorio Descomprimido creado al descomprimir jquery.mobile-1.2.1.zip, como veremos en el siguiente apartado.

En caso que el archivo jquery.mobile-1.2.1.zip y el directorio Descomprimido ya existieran, porque se han bajado previamente, las nuevas bajadas y descomprensiones sobreescribirán al archivo y directorio viejo.

Hay que tener en cuenta que el archivo tiene un tamaño de unos 3 MB, por lo cual tardará un poco en bajar.

________________________________________________________________________________
2.- Lo segundo descomprimir el archivo bajado en un directorio de la SdCard y visualizarlo en un WebView.

Código del programa en Basic4Android

Continuamos con la misma aplicación que estamos realizando.

En este caso nos basamos en el ejemplo que viene con la librería ABZipUnzip.

- Marcamos la librería ABZipUnzip

- Añadimos al Layout un WebView y un Button2

- En el Text del Button1 ponemos Bajar/Descomprimir y
en el Text del Button2 Ver/Inicio

 

 

 

 

 

 

 

- Modificamos el código principal de esta manera...

Código del programa en Basic4Android
Sub Process_Globals
' Adaptado por Juan Antonio Villalpando
' juana1991@yahoo.com

    Dim myZip As ABZipUnzip ''''''' NUEVO
End Sub

Sub Globals
    Dim Button1 As Button
    Dim WebView1 As WebView ''''''' NUEVO
    Dim sdRoot As String
    sdRoot = File.DirRootExternal & "/"
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("1")
End Sub

Sub Activity_Resume
    'check if download has finished while the activity was paused
    If Button1.Enabled = False AND DownloadService.JobStatus = DownloadService.STATUS_DONE Then
        FinishDownload
    End If
End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub Button1_Click
    Activity.Color = Colors.Black
    DownloadService.URL = "http://kio4.com/b4a/programas/jquery.mobile-1.2.1.zip"
    DownloadService.Target = File.OpenOutput(File.DirRootExternal, "jquery.mobile-1.2.1.zip", False)
    StartService(DownloadService)
    Button1.Enabled = False
End Sub

Sub FinishDownload
    Button1.Enabled = True
    DownloadService.JobStatus = DownloadService.STATUS_NONE
    
    ''''''' NUEVO
    If File.ExternalWritable = False Then
        Msgbox("No se puedes escribir en la SdCard.", "")
    End If
    ' Descomprime en /mnt/sdcard/Descomprimido
    File.MakeDir(sdRoot, "Descomprimido")
    myZip.ABUnzip(sdRoot & "jquery.mobile-1.2.1.zip", sdRoot & "Descomprimido")
    Msgbox("Bajado y Descomprimido.","")
    
    ' Visualización
    WebView1.LoadUrl("file:///mnt/sdcard/Descomprimido/jquery.mobile-1.2.1/demos/index.html")
    
End Sub

Sub Button2_Click
    ' Visualización
    WebView1.LoadUrl("file:///mnt/sdcard/Descomprimido/jquery.mobile-1.2.1/demos/index.html")
End Sub
      

En el código anterior he utilizado la variable sdRoot y en otra ocasión el File.DirRootExternal, se podría haber abreviado y utilizar en las dos ocasiones una u otra forma ya que se refiere al mismo directorio, la diferencia es la barra /.
El sdRoot y el File.DirRootExternal son la SdCard.

El Servicio DownloadService es el mismo que antes.


_______________
- Comentario.

Podemos crear en nuestro ordenador un sitio web que luego lo comprimiremos y subiremos ese archivo comprimido a un hosting de Internet (recomiendo el gratuito http://byethost.com/).
Hacemos la aplicación cambiando la dirección web que he puesto en mi ejemplo.

De esta manera cuando actualicemos el sitio web le enviaremos un correo al usuario para que vuelva a bajar el archivo comprimido del sitio.

En vez de un correo podríamos instalar en la aplicación un servicio de manera que cuando actualicemos el sitio se comunicaría al servicio instalado en el móvil del usuario que hay una nueva actualización de nuestro sitio. Aunque esto cargaría el móvil del usuario ya que instalar un servicio equivaldría a que el móvil del usuario debiera comprobar diariamente si hay una nueva actualización.

 

__________________________________________
- Al pulsar un Botón debe salir una web...

    Sub Button1_Click 
DimAs Intent 

i.Initialize(i.ACTION_VIEW, " http://www.google.com " ) 

StartActivity (i) 

End Sub 


_________________________________________________________________
- Al pulsar un Botón debe salir un archivo que tenemos en la SDCard...
    Sub Button1_Click 

DimAs Intent 
i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(File.DirRootExternal, "dibujo.jpg"))
i.SetType("image/*")
StartActivity(i)
End Sub 

________________________________

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información