|   FOROS      |     Tutoriales    |     KIO4 |      
   Inicio B4A (Basic4Android) App inventor 2 Arduino
   Elastix - VoIP Cosas de Windows Webs interesantes  Telecomunicaciones

 


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

Nueva sección en esta web: Elastix - VoIP

¿Qué es esto?

- Monta un servidor telefónico en tu ordenador para poderte comunicar mediante tu móvil con otros móviles que estén en tu red Wifi. Parecido a Skipe o Whatsapp-teléfono, pero en este caso tú controlas al servidor.

- Si sabes abrir puertos del router, también puedes comunicarte con tu móvil de una red Wifi a teléfonos de otra red Wifi.

- También puedes comunicarte con teléfonos "normales", pero para eso necesitas un dispositivo que vale unos 60 €.

- Es muy recomendable aprender el funcionamiento de este servidor telefónico Asterisk-Elastix.

 Elastix - VoIP

 

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

-- Tutorial de B4A --

Volver al índice del tutorial                    Return to index tutorial

____________________________

Basic4Android.

15.- WebView. Navegador Web.

Bajar el código: WebView.zip

Tutorial. Estudio del WebView.

Presentación

- Mediante el WebView podemos realizar un navegador web.

Creamos los controles



 

Si consultamos la Guía oficial, podemos aprender a insertar más código para mejorar nuestra aplicación.

Guía oficial

 

 

 


Las librerías constan de un par de archivos de la forma:
WebViewExtras.jar
WebViewExtras.xml

que se encuentran en la subcarpeta Libraries donde está instalado el Basic4Android:
C:\Program Files (x86)\Anywhere Software\Basic4android\Libraries

 


Bajar el código: WebView.zip

 

Insertamos mediante
Designer / Add View

Button1           Text = Ir
EditText1
WebView1

Guardamos el Designer:
File / Save : Layout

Conectamos el Designer al emulador.
Tools / Connect

Una vez cargado el Designer en el emulador, podemos ubicar los controles donde queramos.

Cargamos la librería:
WebViewExtras


Código del programa en Basic4Android
'Activity module
Sub Process_Globals
 ' Juan Antonio Villalpando
 ' juana1991@yahoo.com
End Sub

Sub Globals
    Dim WebView1 As WebView
    Dim Button1, Button2 As Button
    Dim EditText1 As EditText
    
End Sub

Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Layout") ' Cargamos el Designer

End Sub

Sub Button1_Click
    
     WebView1.LoadUrl("http://" & EditText1.Text)
    ' EditText1.Text = WebView1.Url
End Sub

 

___________________________________

1.- Bajar un archivo de internet a la tarjeta de memoria SD

En este caso se trata de bajar un archivo de internet, concretamente...

http://www.basic4ppc.com/android/images/logo2.png

a un directorio de la tarjeta de memoria SD.

Debemos crear un Layout llamado "layout" con un Button1, Button2 y un ImageView.

Este ejemplo no trata de visualizar una página web, simplemente trata de bajar un archivo, en este caso una imagen.

También debemos marcar la librería HTTP (version x.xx)

- Además debemos cargar dos módulos: HttpUtils.bas y HttpUtilsService.bas

NOTA: las nuevas versiones de Basic4Android ya traen incorporada la librería HttpUtils2, no hace falta bajarla de los foros, solo necesitamos marcarlas para activarlas.

Estos módulos lo podemos bajar de esta página del foro:

Bajamos y descomprimimos HttpUtilsExample.zip y copiamos los archivos HttpUtils.bas y HttpUtilsService.bas en la carpeta de nuestro proyecto.

Ahora debemos agregar estos módulos a nuestro proyecto, para ello vamos a Project / Add Existing Module

Ya los tenemos...

Código del programa en Basic4Android
Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com
Dim imageUrl As String
imageUrl = "http://www.basic4ppc.com/android/images/logo2.png"
End Sub

Sub Globals
Dim ImageView1 As ImageView
End Sub

Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("layout")
HttpUtils.CallbackActivity = "Main" 
HttpUtils.CallbackJobDoneSub = "JobDone"
HttpUtils.CallbackUrlDoneSub = "UrlDone"
End Sub

Sub Activity_Resume
If HttpUtils.Complete = True Then JobDone(HttpUtils.Job)
End Sub

Sub UrlDone(Url As String)
Log(Url & " terminado ")
End Sub

Sub JobDone (Job As String)
If HttpUtils.IsSuccess(imageUrl) Then 
Dim out As OutputStream
' out = File.OpenOutput(File.DirRootExternal & "/" & "directorio_sd", "logo2.png", True)
out = File.OpenOutput(File.DirRootExternal & "/", "logo2.png", True)
File.Copy2(HttpUtils.GetInputStream(imageUrl), out)
out.Close
End If
End Sub

Sub Button1_Click 
HttpUtils.Download("Job1", imageUrl)
End Sub

Sub Button2_Click 
Dim b As Bitmap
b = HttpUtils.GetBitmap(imageUrl)
ImageView1.Bitmap = HttpUtils.GetBitmap(imageUrl)
End Sub

- Comentarios:

- Cuando pulsamos el Button1, la imagen se guarda en una carpeta.

- Cuando pulsamos el Button2, la imagen se muestra en el ImageView1.

____________

Podríamos haber puesto esta línea...

out = File.OpenOutput(File.DirInternal & "/" , "logo2.png", True)

en este caso el archivo se guardaría en la memoria interna, en el caso del emulador se guardaría en...

/data/data/<yourpackagename>/files

<yourpackagename> podría ser anywheresoftware.b4a.samples.programa

La manera de llegar a ese directorio es yendo a linux y pasando a la carpeta

cd /data/data/anywheresoftware.b4a.samples.programa/files

ls

Esto lo vimos en el tutorial dedicado a LINUX en el B4A, mediante adb -e shell

A este archivo solo se puede acceder desde el mismo programa, pero no desde otro programa.

___________________________________

2.- Otra forma de hacerlo con una nueva versión de HttpUtils2

Consultamos este ejemplo con HTTPutils2.

Bajamos una imagen mediante:

job3.Download("http://www.basic4ppc.com/forum/images/categories/android.png")

y luego la presentamos en el Activity (o un ImageView) mediante:

Activity.SetBackgroundImage(Job.GetBitmap)

(Si quisiéramos guardar la imagen en un directorio utilizaríamos: File.Copy2 y Job.GetInputStream, como hemos visto anteriormente.)

___________________________________

3.- Otra forma más de hacerlo

Está basado en este mensaje del foro.
(Consulta también este mensaje.)

En este caso vamos a bajar el archivo logo2.png y cuando pulsamos el Button1 lo visualizamos en el ImageView1

En este proyecto no es necesario los módulos HttpUtils.

Crea un layout con un Button1 y un ImageView1. Activamos la librería HTTP.

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

End Sub

Sub Globals
Dim ImageView1 As ImageView
Dim hcimage As HttpClient
Dim reqimage As HttpRequest
Dim pic As String
End Sub

Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("layout")
pic = "logo2.png"
End Sub

Sub Activity_Resume
End Sub

Sub hcimage_ResponseSuccess(Response As HttpResponse, TaskId As Int)
' Baja el archivo y lo guarda en la sdcard
Response.GetAsynchronously("ImageResponse", _   
File.OpenOutput(File.DirRootExternal & "/" , pic, False), True, TaskId)
End Sub

Sub Button1_Click 
' Toma el archivo de la sdcard y lo pone en el ImageView1
Dim imagepath As String
imagepath = "http://www.basic4ppc.com/android/images/" & pic 
reqimage.InitializeGet(imagepath)
hcimage.Execute(reqimage, 1)

ImageView1.Bitmap = LoadBitmap(File.DirRootExternal, pic)
End Sub

___________________________________

4.- Otra manera de hacerlo

Esto también está publicado en los tutoriales de B4A, concretamente en esta página.

- Debemos marcar la librería: HTTP

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

- El Layout debe tener un Button llamado: btnDownload

Código del programa en Basic4Android
'Activity module
Sub Process_Globals
    Dim image As Bitmap
End Sub

Sub Globals
    Dim btnDownload As Button
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("1")
    'check if we already loaded the image previously.
    If image.IsInitialized Then
        Activity.SetBackgroundImage(image)
    End If
End Sub

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

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub btnDownload_Click
    Activity.Color = Colors.Black
    DownloadService.URL = "http://www.basic4ppc.com/basic4android/images/designer1.png"
    DownloadService.Target = File.OpenOutput(File.DirInternalCache, "image.png", False)
    StartService(DownloadService)
    btnDownload.Enabled = False
End Sub

Sub FinishDownload
    'Load the saved image
    If DownloadService.DoneSuccessfully = True Then
        image = LoadBitmapSample(File.DirInternalCache, "image.png", _
         100%x, 100%y)
        Activity.SetBackgroundImage(image)
    End If
    btnDownload.Enabled = True
    DownloadService.JobStatus = DownloadService.STATUS_NONE
End Sub

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
'Service module
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("Download Service example", "Downloading: " & 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 downloading file: " & 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 downloading file: " & LastException.Message, True)
    Else
        ToastMessageShow("Download successfully.", True)
    End If
    DoneSuccessfully = Success
    Finish
End Sub

Sub Finish
    Log("Service finished downloading")
    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("Download Service", "Download complete", Main)
        Notification1.AutoCancel = True
        Notification1.Notify(1)
    End If
End Sub
Sub Service_Destroy

End Sub

___________________________________

5.- Bajar varios archivos.

Utiliza la librería HttpUtils2

Para bajar varios archivos consulta este tutorial.

___________________________________

6.- Bajar un archivo de gran tamaño.

Utiliza la librería HttpUtils2

Para bajar varios archivos consulta este tutorial.

___________________________________

Recordamos varios lugares de directorios.

DirAssets es el directorio del programa C:\Android\<Programa>\Files
es un directorio de solo lectura, por lo tanto no podemos (desde el programa), cambiar nada en él.

DirRootExternal es un directorio en la tarjeta de memoria SD de nuestro móvil. Si en la tarjeta de nuestro móvil tenemos un directorio que se llama Fotos, podemos ir a ese directorio de esta manera...

out = File.OpenOutput(File.DirRootExternal & "/" & "Fotos", "foto2.jpg", True)

DirInternal es un directorio existente en nuestro Programa y que solo podemos acceder mediante ese Programa.
Para ver el listardo de archivos en ese directorio, lo debemos hacer mediante el shell del LINUX, esto lo he comentado anteriormente y se explica con más detalle en el tutorial LINUX. Este directorio se encuentra en una subcarpeta de nuestro Programa, pero no podemos verlo mediante el Explorador de Windows.

out = File.OpenOutput(File.DirInternal & "/" , "logo2.png", True)

La manera de llegar a ese directorio es yendo a linux y pasando a la carpeta

cd /data/data/<anywheresoftware.b4a.samples.programa>/files

ls

DirDefaultExternal es el directorio por defecto de la aplicación en el móvil. Se puede acceder a él cualquier aplicación mediante la ruta [external device]/Android/data/[package name]/files/

DirInternalCache

_______________________________________________

Introducir datos en un casillero de un formulario de una página web directamente desde nuestro código.

Este código también lo he visto en los foros y me ha resultado curioso.

Entras en esta página: http://www.aangepastlezen.nl/home/boeken
Ves que hay un casillero: "Zoek in de collectie boeken" donde podemos escribir algo.
Se trata de que cuando entremos en la página, desde nuestro código rellene ese casillero automáticamente.

Vamos a... este envío de los foros y bajamos WebViewFormInput.zip

La línea en la que debemos fijarnos es...

Javascript.Append("document.forms.masterform.ContentPlaceHolderDefault_MainContent_MainContentPage_ctl02_SearchInOlc_7_SearchTerms.value='this is some text';")

this is some text es el texto que aparecerá en el casillero cuando cargemos la página.

No te funciona.

ContentPlaceHolderDefault_MainContent_MainContentPage_ctl02_SearchInOlc_7_SearchTerms

esa parte es el nombre del formulario. Ahí debes poner el nombre del formulario donde está el casillero.

Veamos el código fuente de la página...

localiza esta parte...

<div id =" readspeaker1 ">
<p> &nbsp; </p>
<div id =" zoeken " onkeypress =" javascript:return WebForm_FireDefaultButton(event, &#39;ContentPlaceHolderDefault_MainContent_MainContentPage_ctl02_SearchInOlc_8_SearchButton&#39;) ">
<fieldset>

En el código que has bajado hay un 7 y en el de la página actualizada hay un 8, cambia el 7 por el 8.

Para que además pulse el botón automáticamente pondríamos debajo de la línea de nuestro código:

Javascript.Append("document.forms.masterform.ContentPlaceHolderDefault_MainContent_MainContentPage_ctl02_SearchInOlc_8_SearchButton.click()")

_______________________________________________

Orientación horizontal - vertical de una página web.

 

Consulta este ejemplo del foro y baja la aplicación PreserveURLOnScreenRotation.zip.

________________________________

Si quieres que este tutorial se mantenga y lo actualice con más programas, escríbeme un correo a Juan Antonio: juana1991@yahoo.com

- 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