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


.

App inventor 2 en español
Cómo programar los teléfonos móviles con Android
mediante App inventor 2 - Juan Antonio Villalpando

-- Tutorial de iniciación de App Inventor 2 en español --

Volver al índice del tutorial

____________________________

146.- Archivos dentro de la extensión. Rush.

- Vamos a crear archivos dentro de la extensión y leerlo.

________________________
1.- Introducir archivos dentro de la extensión.

- Mediante Rush creamos una extensión llamada: com.juan.dentro

- Mediante un Editor de texto creamos un archivo de texto y lo llamamos: interno.txt

interno.txt
				   
Uno, dos, tres.
One, two, three.
Hola amigo.
Hello friend.

- También crearemos este archivo pitagoras.htm, que contiene un código JavaScript.

pitagoras.htm
				   
<!DOCTYPE html>
<html><head></head><body>
<script>
    datos =  window.AppInventor.getWebViewString(); // Entrada de datos.
    datos = datos + ":";  
  
    catetos = datos.split(":"); 
    cateto1 = catetos[0];
    cateto2 = catetos[1];
    
    hipotenusa = Math.sqrt(Math.pow(cateto1, 2) + Math.pow(cateto2, 2)) ;
   
    window.AppInventor.setWebViewString("" + hipotenusa); // Salida datos 
</script>
</body></html>

- Esta imagen también la utilizaremos: perro.png

- Estos tres archivos los copiamos en la carpeta assets de la extensión que estamos creando.

C:\rush\exe\win\dentro\assets

- Vamos al archivo de Rush: rush.yml

C:\rush\exe\win\dentro\rush.yml

rush.yml
				   
assets:
  # Extension icon. This can be a URL or a local image in 'assets' folder.
  icon: icon.png
  # Extension assets.
  other:
     - interno.txt
     - perro.png
     - pitagoras.htm

- Vamos a la parte de assets. Observa la línea de other, he añadido:

- interno.txt
- perro.png
- pitagoras.htm

- En ese archivo es muy importante la indentación, es decir el espaciado y los márgenes; no debes cambiar la indentación.

- Si ahora volvemos a compilar la extensión mediante ..\rush build, obtendremos los archivos: interno.txt, perro.png y pitagoras.htm dentro de la extensión.

- Descompilamos la extensión con Java Decompiler

- Fíjate que los archivos están en: com.juan.dentro/assets

________________________
2.- El assets en App Inventor.

- Hasta septiembre de 2021 el directorio assets de App Inventor, para utilizarlo con el emulador MIT Companion, estaba en:

/mnt/sdcard/AppInventor/assets/

es lo mismo que...

/storage/emulated/0/AppInventor/assets/

- Ahora lo han cambiado, si utilizas Android < 10 se encontrará en:

/storage/emulated/0/Android/data/edu.mit.appinventor.aicompanion3/files/AppInventor/assets

- Si utilizas un Android >= 10 se encontrará en:

/storage/emulated/0/Android/data/edu.mit.appinventor.aicompanion3/files/assets

- Podemos comprobarlo mediante estos bloques, ejecutándolo desde el MIT Companion:


- Obtendremos (en Android < 10):

file:///storage/emulated/0/Android/data/edu.mit.appinventor.aicompanion3/files/AppInventor/assets

- Si compilamos la aplicación y la ejecutamos, obtendremos esta dirección de assets:

file:///android_asset

________________________
3.- Lectura del archivo en MIT Companion e Instalado.

cadiz.aia

- Vamos a leer el archivo interno.txt desde MIT Companion e Instalado, con el componenten Archivo.

- Además también ejecutaremos el script que se encuentra en pitagoras.htm.

- Y mostraremos la imagen del perro.png

- He creado una aplicación llamada cadiz.aia con la extensión com.juan.dentro.aix, he guardado el archivo .aia y lo he descomprimido con Winrar.

- Con el descompresor vamos al directorio:

assets\external_comps\com.juan.dentro\assets

- observamos:

- interno.txt
- perro.png
- pitagoras.htm

- Compilo la aplicación y obtengo cadiz.apk, mediante APK Editor Studio, lo descompilo y obtengo:

- Observa los archivos del assets "normal": saludos.txt y gato.png

- y los archivos internos de la extensión que se encuentra dentro del assets "normal" y además en com.juan.dentro

_____________________________
- Diseño.

- He añadido al asset el archivo saludos.txt y la imagen gato.png, para comparar la localización de estos archivos con respecto al interno.txt

_____________________________

- Bloques.

 

________________________
4.- Código de la extensión.

- Este es el código de la extensión, simplemente tiene un bloque para copiar archivos desde el asset.

- Nota: he añadido una función para copiar archivos desde el asset a otro directorio. Esta función no es necesaria, simplemente la he puesto para comprobar su funcionamiento.

dentro.java
				   
package com.juan.dentro;
// Juan Antonio Villalpando
// http://kio4.com/appinventor/146_extension_archivo_rush.htm

import com.google.appinventor.components.annotations.SimpleFunction;
import com.google.appinventor.components.annotations.DesignerProperty;
import com.google.appinventor.components.annotations.SimpleProperty;
import com.google.appinventor.components.annotations.PropertyCategory;
import com.google.appinventor.components.common.PropertyTypeConstants;
import com.google.appinventor.components.common.ComponentCategory;
import com.google.appinventor.components.annotations.SimpleEvent;
import com.google.appinventor.components.runtime.AndroidNonvisibleComponent;
import com.google.appinventor.components.runtime.ComponentContainer;


import android.content.Context;
import java.io.*; 

public class Dentro extends AndroidNonvisibleComponent {
   
  private Context context; 

  public Dentro(ComponentContainer container) {
    super(container.$form());
    context = (Context) container.$context();
  }

//////// Copiar archivo desde el Asset a un directorio indicando nombre archivo
@SimpleFunction(description="Copy file from asset (or subfolder asset) to path. " +
"Example with subfolder, fileName: com.juan.dentro/texto.txt " +
"dest: /storage/emulated/../absolute address/../namefile.ext")
 public void CopyFileAsset(String fileName, String dest) throws Exception {

	InputStream stream = null;
	OutputStream output = null;

    stream = context.getAssets().open(fileName);
	output = new BufferedOutputStream(new FileOutputStream(dest));

    byte data[] = new byte[1024];
    int count;

    while((count = stream.read(data)) != -1)
    {  output.write(data, 0, count);  }

    output.close();
    stream.close();
 }
}     // => Fin  
  
  

________________________
5.- AndroidManifest.xml

AndroidManifest.xml
				   
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.juan.dentro">
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  <application>
    <!-- <activity android:name=".MainActivity">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity> -->
  </application>
</manifest>

  
  

________________________
________________________
________________________
________________________
- Archivo JavaScript. Siege de Eratóstenes. Cálculo de números primos.

- Cálculo de números primos menores a uno dado.

https://community.appinventor.mit.edu/t/insert-files-into-the-extension-using-rush-javascript-from-extension/47134/14

primos.java
				   
package j.f;

import com.google.appinventor.components.annotations.SimpleFunction;
import com.google.appinventor.components.runtime.AndroidNonvisibleComponent;
import com.google.appinventor.components.runtime.ComponentContainer;

public class F extends AndroidNonvisibleComponent {
  public F(ComponentContainer container) {
    super(container.$form());
  }

@SimpleFunction(description="http://localhost/j.f/sieve.htm")
public String Sieve() {	
return "http://localhost/j.f/sieve.htm";
}
}

 

rush.yml
				   
assets:
  # Extension icon. This can be a URL or a local image in 'assets' folder.
  icon: icon.png
  # Extension assets.
  other:
     - sieve.htm

 

___________________________

 

- 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