Usuario:ManuelRomero/Manifest

De WikiEducator
Saltar a: navegación, buscar



Componentes en una aplicación Android

  1. ACTIVITY
  2. INTENT
  3. SERVICE
  4. BROADCAST RECEIVER
  5. CONTENT PROVIDER
  6. VIEW
  7. WIDGET
  • Los cuantro primeros son muy importantes
  • Casi siempre van a estar presente en una aplicación o desarrollo

Activity

  • Componente principal de la interfaz gráfica
  • Representa cada una de las pantalla de nuestra aplicación

Service

  • Son servicios o procesos ejecutados en segundo plano
  • No disponen de interfaz gráfica
  • Por ejemplo un objeto reloj o cargar información en una base de datos

Content Provider

  • Permite compartir datos entre aplicaciones
  • No necesitamos mostrar la forma en la que hacemos las cosas a otras aplicaciones

Broadcast Receiver

  • Detecta mensajes y eventos generados por el sistema y reacciona ante ellos
  • Pueden recibir mensajes de objetos Intends
  • Por ejemplo batería baja o se ha recibido un mensaje

View

  • Componentes básicos con los construimos nuestras aplicaciones
  • Existen muchos componentes de este tipo: Botones, Listas desplegables

Widget

  • Elementos visuales interactivos
  • Tienen comportamiento propio

Intent

  • Elementos u objetos que permiten que exista comunicación entre actividades de una aplicación
  • También se pueden comunicar otros objetos descritos anteriormente

El fichero Manifest

  • Cada proyecto tiene un fichero AndroidManifext.xml
  • Definiremos información sobre nuestra aplicación
  1. Datos de versionado y nombre de nuestra aplicacion
  2. Los componentes de nuestra aplicación y como reaccionan.
  3. Permisos
  4. Perfiles de Hardware
  5. Veriones de Android que soporta
  • Sirve para que el sistema antes de ejecutar la aplicación concozca los componentes que va a tener cargados
  • Es un fichero XML, por lo tanto tendrá elementos, atributos y valores para los atributos
  • Sólo se pueden incluir elementos definidos, el usuario no puede incorporar elementos propios (listados más abajo)
  • Al menos debe tener una etiqueta manifest y una aplication y éstas sólo pueden estar una vez
<manifest  .... atributos=valor >
 ....
 <application ...atributos=valor >
 
  ... otros elementos...
 
 </application>
</manifest>

manifest

  • Es el nodo raiz del fichero manifest.xml
Sintaxis
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="string"
          android:sharedUserId="string"
          android:sharedUserLabel="string resource" 
          android:versionCode="integer"
          android:versionName="string"
          android:installLocation=["auto" | "internalOnly" | "preferExternal"] >
    . . .
</manifest>

Atributos del elemento manifest

xmlns
xml namespace
Define el namesapace de android y siempre debe tener el valor "http://schemas.android.com/apk/res/android"
pakage
Nombre del paquete raiz de nuestra aplicación
Este nombre tiene que ser único en el market
Se usa un nombre de dominio escrito al revés para evitar posibles conflictos con otros desarrollos
versionCode
Número que se debe incrementar cada vez que actualizamos nuestra aplicacion en el market
Este número es seguido por el market para ver la versión más reciente de una aplicación número más alto
Este número no se muestra al usuario en el market
versionName
Es lo que se muestra en el market
Podemos poner lo que queramos
sharedUserId
El nombre del ID de usuario de Linux que será compartido por otras aplicaciones
Quien es el propietario de este proceso
sharedUserLabel
installLocation
Donde debe ser instalada nuestra aplicación por defecto
solo funcionan en versiones 2.2 o superior las anteriores las ignora
Valores android:installLocation=["auto" | "internalOnly" | "preferExternal"]
auto : Puede ser instalado en el dispositivo externo, pero por defecto la almacenará en el dispositivo interno
internalOnly :Sólo se puede instalar en el dispositivo interno
preferExternal :Se instalará en el dispositivo externo (tarjeta SD)por defecto pero si hay problemas se puede instalar en el dispositivo interno.
  • Ejemplo
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.ciclovidaactividad"
    android:versionCode="1"
    android:versionName="1.0" 
    android:installLocation="preferExternal">
</manifest>

Elemento application

Sintaxis
<application android:allowTaskReparenting=["true" | "false"]
             android:backupAgent="string"
             android:debuggable=["true" | "false"]
             android:description="string resource"
             android:enabled=["true" | "false"]
             android:hasCode=["true" | "false"]
             android:hardwareAccelerated=["true" | "false"]
             android:icon="drawable resource"
             android:killAfterRestore=["true" | "false"]
             android:largeHeap=["true" | "false"]
             android:label="string resource"
             android:logo="drawable resource"
             android:manageSpaceActivity="string"
             android:name="string"
             android:permission="string"
             android:persistent=["true" | "false"]
             android:process="string"
             android:restoreAnyVersion=["true" | "false"]
             android:taskAffinity="string"
             android:theme="resource or theme"
             android:uiOptions=["none" | "splitActionBarWhenNarrow"] >
    . . .
</application>
  • Analizaremos sólo el atributo ico y label
  • Atributos cuyos valores son recursos del sistema

Atributos icon, label

AtributosApplication.png

icon
Es el icono de la aplicación para el market
También será para lanzar nuestra aplicación en el emulador o móvil
label
  • String que se va a mostrar para nuestra aplicación en el lanzado de la aplicación
  • Barra de título de nuestra aplicación

Atributo debuggable

  • Lo normal es tener este atributo a true
  • Cuando se vaya a publicar en el market pasarlo a false


Activity

  • Una aplicación android por lo menos ha de tener un activity
Sintaxis
<activity android:allowTaskReparenting=["true" | "false"]
          android:alwaysRetainTaskState=["true" | "false"]
          android:clearTaskOnLaunch=["true" | "false"]
          android:configChanges=["mcc", "mnc", "locale",
                                 "touchscreen", "keyboard", "keyboardHidden",
                                 "navigation", "screenLayout", "fontScale", "uiMode",
                                 "orientation", "screenSize", "smallestScreenSize"]
          android:enabled=["true" | "false"]
          android:excludeFromRecents=["true" | "false"]
          android:exported=["true" | "false"]
          android:finishOnTaskLaunch=["true" | "false"]
          android:hardwareAccelerated=["true" | "false"]
          android:icon="drawable resource"
          android:label="string resource"
          android:launchMode=["multiple" | "singleTop" |
                              "singleTask" | "singleInstance"]
          android:multiprocess=["true" | "false"]
          android:name="string"
          android:noHistory=["true" | "false"]  
          android:parentActivityName="string" 
          android:permission="string"
          android:process="string"
          android:screenOrientation=["unspecified" | "user" | "behind" |
                                     "landscape" | "portrait" |
                                     "reverseLandscape" | "reversePortrait" |
                                     "sensorLandscape" | "sensorPortrait" |
                                     "sensor" | "fullSensor" | "nosensor"]
          android:stateNotNeeded=["true" | "false"]
          android:taskAffinity="string"
          android:theme="resource or theme"
          android:uiOptions=["none" | "splitActionBarWhenNarrow"]
          android:windowSoftInputMode=["stateUnspecified",
                                       "stateUnchanged", "stateHidden",
                                       "stateAlwaysHidden", "stateVisible",
                                       "stateAlwaysVisible", "adjustUnspecified",
                                       "adjustResize", "adjustPan"] >   
    . . .
</activity>
  • En nuestra aplicación aparece la siguiente información que de momento es la que vamos a analizar


      <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
      </activity>


Atributos de activity

name
Es el nombre de la clase activity
normalmente se especifica en crudo no referenciado al ficheor string.xml
label
  • El string que va a aparecer en la bara de título de la actividad
  • Será usado en junto con el icono del lanzador
  • Si no se especifica aparecería el label de la aplicación
screenOrientation
  android:screenOrientation=["unspecified" | "user" | "behind" |
                                     "landscape" | "portrait" |
                                     "reverseLandscape" | "reversePortrait" |
                                     "sensorLandscape" | "sensorPortrait" |
                                     "sensor" | "fullSensor" | "nosensor"]
  • Valores deseados para ciertas activity son landscape o portrait esto obliga a que use esta orienteación
  • En otros casos o si se deja vacío la orientación cambiará indicado por el acelerómetro
  • Esto provocará que nuestra actividad se destuya y luego restaurada, cosa que seguramente no queremos que ocurra.


configChanges
  • Esto también puede provocar un cambio en la pantalla
  • A la vez destruye y vuelve a recostruir nuestra actividad
android:configChanges=["mcc", "mnc", "locale",
                                 "touchscreen", "keyboard", "keyboardHidden",
                                 "navigation", "screenLayout", "fontScale", "uiMode",
                                 "orientation", "screenSize", "smallestScreenSize"]
 
*Se pueden elegir varios, por ejemplo

android:configChanges="keyboard|keyboardHidden|orientation" </source>

  • En este caso estamos diciendo que cuando aparezca o desaparezca el teclado
  • O cuando cambie la orienteación estos cambios si se producen ejecutándose nuestra actividad
  • Los queremos gestionar nostros y no que el sistema destruya u luego recargue nuestra actividad.

Intent

  • Sirve para especificar que activity o service inicia nuestra aplicación
  • intent-filter tenemos muchos
    • action
esta activity va a ser un punto de entrada para nuestra aplicació´n
    • category
que esta activity sea añadida con su icono al lanzador de aplicaciones
  • Ambos sólo tienen un atributo name
  • En ambos casos como name le pasamos un intent
 <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
  • Sólo una activity debe tener estas dos etiquetas

Lista de atributos

En este ficheros sólo pueden aparecer los siguientes elementos

<action> 
<activity> 
<activity-alias> 
<application> 
<category> 
<data> 
<grant-uri-permission> 
<instrumentation> 
<intent-filter> 
<manifest> 
<meta-data> 
<permission> 
<permission-group> 
<permission-tree> 
<provider> 
<receiver> 
<service> 
<supports-screens> 
<uses-configuration> 
<uses-feature> 
<uses-library> 
<uses-permission> 
<uses-sdk>


Diagrama general

<?xml version="1.0" encoding="utf-8"?>
 
<manifest>
 
    <uses-permission />
    <permission />
    <permission-tree />
    <permission-group />
    <instrumentation />
    <uses-sdk />
    <uses-configuration />  
    <uses-feature />  
    <supports-screens />  
    <compatible-screens />  
    <supports-gl-texture />  
 
    <application>
 
        <activity>
            <intent-filter>
                <action />
                <category />
                <data />
            </intent-filter>
            <meta-data />
        </activity>
 
        <activity-alias>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </activity-alias>
 
        <service>
            <intent-filter> . . . </intent-filter>
            <meta-data/>
        </service>
 
        <receiver>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </receiver>
 
        <provider>
            <grant-uri-permission />
            <meta-data />
        </provider>
 
        <uses-library />
 
    </application>
 
</manifest>