Capítulo 2 tecnologías de comunicación inalámbrica para terminales móviles

52
Servicios móviles Dpto. de Ingeniería de Telecomunicación Área de Ingeniería Telemática Universidad de Jaén Escuela Politécnica Superior de Linares Versión 1.3 Autor: Juan Carlos Cuevas Martínez CAPÍTULO 2 Tecnologías de comunicación inalámbrica para terminales móviles Uso de los interfaces de comunicación disponibles en un terminal Android

Transcript of Capítulo 2 tecnologías de comunicación inalámbrica para terminales móviles

Page 1: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Servicios móviles

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Autor: Juan Carlos Cuevas Martínez

CAPÍTULO 2Tecnologías de comunicación inalámbrica para terminales móvilesUso de los interfaces de comunicación disponibles en un terminal Android

Page 2: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

2

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

1. Conocer los detalles de las clases de gestión de los interfaces de comunicación inalámbricos con Android.

2. Conocer como activar y usar estos interfaces de comunicaciones con Android.

3. Conocer la problemática de la comunicaciones con Android.

OBJETIVOS

Page 3: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

3

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

1. Bluetooth2. Wifi3. GPS4. NFC

ÍNDICE

Page 4: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

4

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

La plataforma Android incluye soporte para la comunicación Bluetootn, que permite a un dispositivo intercambiar datos de forma inalámbrica con otros dispositivos Bluetooth.

Las aplicaciones permiten acceso a la funcionalidad de Bluetooth a través de la API de Bluetooth de Android (paquete android.bluetooth).

Esta API permite comunicaciones punto a punto y multipunto.

1. Bluetooth

Page 5: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

5

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

API BLUETOOTH Utilizando el API de Bluetooth, una aplicación

para Android puede realizar lo siguiente: Analizar en busca de otros dispositivos Bluetooth. Consulta un adaptador de Bluetooth para los

dispositivos Bluetooth vinculados. Establecer canales RFCOMM. Conectarse a otros dispositivos a través de

descubrimiento de servicios. Transferencia de datos hacia y desde otros

dispositivos. Administrar conexiones múltiples.

1. Bluetooth

Page 6: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

6

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Clases más significativas

API BLUETOOTH

BluetoothAdapter BluetoothDevice BluetoothSocket BluetoothServerSocket BluetoothClass BluetoothProfile BluetoothHeadset BluetoothA2dp (A2DP: Advanced Audio Distribution Profile) BluetoothHealth BluetoothHealthAppConfiguration BluetoothProfile.ServiceListener

1. Bluetooth

Page 7: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

7

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Con el fin de utilizar las funciones Bluetooth de la aplicación, es necesario declarar al menos uno de los dos permisos de Bluetooth: BLUETOOTH y BLUETOOTH_ADMIN (ambos son permisos normales). BLUETOOTH sirve para realizar cualquier comunicación Bluetooth, tales como

solicitar una conexión, aceptar una conexión, y la transferencia de datos. BLUETOOTH_ADMIN sirve para iniciar la búsqueda de dispositivos o

manipular la configuración de Bluetooth. La mayoría de las aplicaciones necesitan este permiso sólo para la capacidad de descubrir dispositivos Bluetooth.

Nota: Si utiliza BLUETOOTH_ADMIN, entonces también debe tener el permiso BLUETOOTH.<Manifiest ... >  <uses-permission android:name= android.permission.BLUETOOTH"/></ Manifiest>

Permisos Bluetooth

1. Bluetooth

Page 8: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

8

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Representa el adaptador local de Bluetooth (dispositivo radio).

El BluetoothAdapter es el punto de entrada para toda la interacción de Bluetooth.

Usando este dispositivo podemos: Descubrir otros dispositivos Bluetooth Consultar la lista de estas utilizando la dirección

MAC conocida.

Clases del API de BluetoothBluetoothAdapter

1. Bluetooth

Page 9: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

9

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

En JELLY_BEAN_MR1 e inferiores: Se debe llamar al método estático:

BluetoothAdapter.getDefaultAdapter()

En  JELLY_BEAN_MR2 y superiores: Se debe llamar al método del contexto actual:

getSystemService(BLUETOOTH_SERVICE)Este da una instancia de BluetoothManager, del cual se debe llamar a getAdapter().

O también, simplemente:BluetoothAdapter.getDefaultAdapter();

Clases del API de BluetoothBluetoothAdapter

1. Bluetooth

Page 10: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

10

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

BluetoothAdapter. Operaciones comunes

Clases del API de Bluetooth

Comprobar la disponibilidad de interfaz radio Bluetooth:BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();if (mBluetoothAdapter == null) { // El dispositivo no soporta Bluetooth}

1. Bluetooth

Page 11: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

11

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

BluetoothAdapter. Operaciones comunes

Clases del API de Bluetooth

Activar Bluetooth: Se llama a una nueva actividad para preguntar al

usuario si quiere activarlo.if (!mBluetoothAdapter.isEnabled()) { Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE); startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);}

Si el usuario la activa en el método onActivityResult() se recibe RESULT_OK, y RESULT_CANCELED en otro caso

1. Bluetooth

Page 12: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

12

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

BluetoothAdapter. Operaciones comunes

Clases del API de Bluetooth

Buscar todos los dispositivos Bluetooth vinculados:

getBondedDevices() Buscar dispositivos Bluetooth:

startDiscovery() Crear un BluetoothServerSocket para recibir

peticiones de conexiones entrantes con:listenUsingRfcommWithServiceRecord(String,UUID)

1. Bluetooth

Page 13: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

13

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Universally unique identifier (UUID)

Clases del API de Bluetooth

Es un identificador de 128 bits, supuesto para ser único e inmutable.

Cada grupo de bits tiene un significado en función de la versión que se utilice para generarlo.

Para los ejemplos de Bluetooth este sería un ejemplo:UUID SERVICIO_UUID = UUID.fromString("11000000-0011-1100-AAAA-0123456789AB");//Código en formato XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

Ver la RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace, punto 4.2 para las reglas de generación de UUID basados en tiempo.

1. Bluetooth

Page 14: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

14

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Ejemplo: registrar un BroadcastReceiver para descubrir dispositivos

Clases del API de Bluetooth

// Create a BroadcastReceiver for ACTION_FOUNDprivate final BroadcastReceiver mReceiver = new BroadcastReceiver() {    public void onReceive(Context context, Intent intent) {        String action = intent.getAction();        // When discovery finds a device        if (BluetoothDevice.ACTION_FOUND.equals(action)) {            // Get the BluetoothDevice object from the Intent            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);            // Add the name and address to an array adapter to show in a ListView            mArrayAdapter.add(device.getName() + "\n" + device.getAddress());        }    }};// Register the BroadcastReceiverIntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy

1. Bluetooth

Page 15: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

15

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Representa un dispositivo Bluetooth remoto. Esta opción se utiliza para solicitar una conexión con un dispositivo remoto a través de un BuetoothSocket o consultar información acerca del dispositivo, tales como su nombre, dirección, clase,…

Clases del API de BluetoothBluetoothDevice

1. Bluetooth

Page 16: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

16

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Representa la interfaz para una toma de Bluetooth. Este es el punto de conexión que permite que una aplicación intercambie datos con otro dispositivo Bluetooth a través de InputStream y OutputStream.

Clases del API de BluetoothBluetoothSocket

1. Bluetooth

Page 17: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

17

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Representa un socket de servidor abierto que escucha las solicitudes entrantes (similar a una red TCP ServerSocket ), con el fin de conectar dos dispositivos Android.

Cuando un dispositivo Bluetooth remoto hace petición a otro dispositivo, el BluetoothServerSocket devolverá un BluetoothSocket si la conexión es aceptada.

Clases del API de BluetoothBluetoothServerSocket

1. Bluetooth

Page 18: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

18

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Clases del API de BluetoothBluetoothServerSocket. Ejemplo

1. Bluetooth

BluetoothServerSocket tmp = null;try { tmp = mBTadapter.listenUsingRfcommWithServiceRecord(SERVICIO, SERVICIO_UUID); mServerSocket = tmp;} catch (IOException e) {mServerSocket = null;}

while (true) { try { socket = mServerSocket.accept(); if (socket != null) { OutputStream os = socket.getOutputStream(); DataOutputStream dos = new DataOutputStream(os); dos.writeUTF(mensaje); dos.flush(); …

socket.close();

} } catch (IOException e) { break; }}

Page 19: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

19

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Describe las características generales y las capacidades de un dispositivo Bluetooth. Esta clase es una de sólo lectura.

Algunos métodos de interés son: boolean hasService(int service): comprueba si se el

servicio especificado es soportado. Los servicios están almacenados en la clase BluetoothClass.Service, algunos son AUDIO, NETWORKING, OBJECT_TRANSFER, etc.

Int getDeviceClass(): para saber que tipos de dispositivo Bluetooth están presentes. Los dispositivos están el la clase BluetoothClass.Device

Clases del API de BluetoothBluetoothClass

1. Bluetooth

Page 20: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

20

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Para acceder a una pila Wifi mediante una aplicación en Android, se utiliza el paquete android.net.wifi, el cual provee los mecanismos necesarios para ello.

Este paquete proporciona un conjunto de clases que va desde los puntos de acceso detectados hasta el estado de la propia conexión, es decir, la velocidad, calidad del enlace, etc.

Introducción

2. WIFI

Page 21: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

21

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Para poder acceder a la API WIFI es necesario declarar los siguientes permisos en el manifest de nuestra aplicación: ACCESS_WIFI_STATE permite acceder a la información

sobre el estado de la WIFI y de todo lo relacionado con ella (conexiones, Puntos de Acceso configurados y/o detectados, etcétera).

CHANGE_WIFI_STATE permite cambiar todas las opciones relacionadas con la WIFI.<manifest ... ><uses-permission android:name="android.permission. ACCESS_WIFI_STATE " /><uses-permission android:name="android.permission. CHANGE_WIFI_STATE " /></manifest>

Permisos

2. WIFI

Page 22: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

22

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

WifiManager: Es el punto de entrada a los servicios WIFI del sistema. Para obtener una instancia de la misma hay que pedirla al contexto de la aplicación. Ésta clase es única para todo el sistema.

ScanResult: Contiene información relativa a los dispositivos descubiertos durante un escaneo del entorno. El resultado de la búsqueda de una lista de objetos de esta clase.

WifiInfo: Clase encargada de describir el estado de la conexión WIFI activa.

WifiConfiguration: Clase encargada de representar una configuración WIFI válida.

Clases del API WIFI

2. WIFI

Page 23: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

23

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Permite acceder a la lista de redes configuradas tanto para consultarla como para modificarla permitiendo además editar parámetros concretos de cualquier configuración.

Se puede acceder a la conexión actual (si la hay). Puede iniciar una nueva conexión, detenerla y obtener información dinámica sobre el estado de la conexión.

Proporciona mecanismos para escanear el entorno en busca de Puntos de Acceso, dando toda la información sobre el mismo (tipo de encriptación, potencia, nombre, MAC, etcétera).

Clases del API WIFIWifiManager

2. WIFI

Page 24: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

24

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Proporciona un conjunto de Intents necesarios para implementar Broadcasts ante cualquier cambio de estado en la WIFI.

Se obtiene a través de la llamada a Context.getSystemService

(Context.WIFI_SERVICE);

Clases del API WIFIWifiManager

2. WIFI

Page 25: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

25

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

WifiManager tiene dos clases asociadas a ella: WifiManager.MulticastLock: Permite a una aplicación

recibir paquetes Multicast a través de la WIFI. Ésta característica debería evitarse en la medida de lo posible, pues consume cantidades ingentes de batería.

WifiManager.WifiLock: Permite a una aplicación mantener la radio WIFI activa aún cuando no se esté utilizando y hasta que se elimine el bloqueo. Se debe emplear solamente cuando sea imprescindible

que la conexión se mantenga activa durante un cierto tiempo, como la descarga de ficheros grandes.

Clases del API WIFIWifiManager

2. WIFI

Page 26: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

26

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

WifiP2PManager permite usar las características introducidad en Android 4.0 (API 14) que cumplen con Wi-Fi Direct™ .

Este gestor proporciona métodos para buscar y descubrir dispositivos capaces de comunicación P2P con Wifi dentro del rango.

Clases del API WIFIWifiP2pManager

2. WIFI

Page 27: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

27

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Contiene información relativa a los dispositivos descubiertos durante un escaneo del entorno. Por cada nuevo dispositivo se devolverá una instancia de ésta clase que lo representará. Sus campos, todos públicos, proporcionan la siguiente información String BSSID: Dirección del Punto de Acceso. String SSID: Nombre de la Red. String capabilities: Describe el tipo de autenticación, la

encriptación y la gestión de claves soportadas por el Punto de Acceso.

int frequency: Frecuencia en MHz del Punto de Acceso.o    int level: Nivel de intensidad de la señal en dBm.

Clases del API WIFIScanResult

2. WIFI

Page 28: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

28

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Clase encargada de representar una configuración WIFI válida. Todos sus campos son públicos: String BSSID: Asocia la conexión representada por la

instancia actual de la clase con el Punto de Acceso cuya dirección coincide con BSSID.

String SSID: SSID de la conexión. BitSet allowedAuthAlgorithms: Protocolos de

autenticación soportados por ésta configuración. BitSet allowedGroupCiphers: Sistemas de cifrado

soportados por esta configuración.

Clases del API WIFIWifiConfiguration

2. WIFI

Page 29: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

29

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

BitSet allowedKeyManagemet: Protocolos de gestión soportados por la configuración.

BitSet allowedPairwiseCiphers: Pares de códigos WPA soportados por la configuración.

BitSet allowedProtocols: Protocolos de seguridad aportados por ésta configuración.

boolean hiddenSSID: Red que no utiliza un SSID con Broadcast.

Clases del API WIFIWifiConfiguration

2. WIFI

Page 30: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

30

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Para iniciar el escaneo de las redes Wifi disponibles, lo primero que tenemos que asegurarnos es de que el sistema Wifi esté activo, en el caso de que no esté activo debemos esperar a que se active. Si está activo, entonces podemos empezar a escanear.

En las diapositivas siguientes se muestra el código para escanear las redes Wifi.

Para obtener los resultados se debe registrar un BroadcastReceiver con la acción:

WifiManager.SCAN_RESULTS_AVAILABLE_ACTION

Escaneo de redes WIFI

2. WIFI

Page 31: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

31

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Ejemplo para escanear las redes Wifi circundantes

Escaneo de redes WIFI

public void startScanning(){ Log.i(WifiService.NAME, "in startScanning()"); if (!_wifiManager.isWifiEnabled()) { Log.i(WifiService.NAME, "WIFI disabled"); Toast.makeText(context, "Wifi Deshabilitada,

Habilitela e intente de nuevo", Toast.LENGTH_LONG).show(); // Es aconsejable asegurarse de que se detienen los escaneos. scanning = false; return; } Log.i(WifiService.NAME, "WIFI enabled"); scanning = true;…

2. WIFI

Page 32: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

32

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Ejemplo para escanear las redes Wifi circundantes

Escaneo de redes WIFI

… // Se adquiere la radio WIFI. _wifiLock.acquire(); if(!_isScanning){ wifiManager.startScan(); Log.i(WifiService.NAME, "Escaneando"); _isScanning = true; } Toast.makeText(_context, "Iniciando escaneo WIFI", Toast.LENGTH_LONG).show();}

2. WIFI

Page 33: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

33

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Ejemplo para escanear las redes Wifi circundantes. Registro del receptor

Escaneo de redes WIFI

receiver = new WiFiScanReceiver(this);

registerReceiver(receiver, new IntentFilter( WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

2. WIFI

Page 34: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

34

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Ejemplo para escanear las redes Wifi circundantes. Resultados

Escaneo de redes WIFI

public class WiFiScanReceiver extends BroadcastReceiver { private static final String TAG = "WiFiScanReceiver"; @Override public void onReceive(Context c, Intent intent) { if (intent.getAction().equals( WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {

List<ScanResult> results = wifiDemo.wifi.getScanResults(); for (ScanResult result : results) {

//Hacer algo } }}

2. WIFI

Page 35: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

35

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

startScanning(): comprueba el estado de la WIFI invocando a wifiManager.isWifiEnabled(). Si la WIFI está desactivada mostrará un mensaje por la pantalla y retornará

wifiLock.acquire(): Adquiere la radio Wifi en caso de que el estado de la WIFI sea satisfactorio y ésta quedará activada aunque dejemos de usar la aplicación durante un rato.

Una vez que se ha adquirido la WIFI se inicia el escaneo con wifiManager.startScan().

Escaneo de redes WIFI

2. WIFI

Page 36: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

36

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Wi-Fi Peer-to-Peer Wi-Fi peer-to-peer (P2P) permite a dispositivos

Android 4.0 (API level 14) o posterior, con un hardware apropiado, conectarse entre sí directamente vía Wi-Fi sin un punto de acceso intermedio.

Wi-Fi P2P cumple con el programa de certificación de Wi-Fi Alliance para Wi-Fi Direct™.

2. WIFI

Page 37: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

37

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Capacidades del API

Wi-Fi Peer-to-Peer

Descubrir y conectarse a dispositivos que soporten Wi-Fi P2P.

Comunicar a mayor distancia y velocidad que Bluetooth.

Dar soporte a aplicaciones con altas necesidades de transferencia.

2. WIFI

Page 38: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

38

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Contenido del API

Wi-Fi Peer-to-Peer

Los métodos para descubrir, solicitar y conectar con otros usuarios están definidos en las clase WifiP2pManager.

Proporciona receptores de eventos (listeners) que permiten recibir notificaciones, tanto en las llamadas exitosas como en las fallidas a los métodos de WifiP2pManager. Estos métodos permiten pasarle como parámetro un listener.

Intents que notifican tras la detección de eventos detectados por el framework Wi-Fi P2P, tales como una conexión caída o un par recién detectado.

2. WIFI

Page 39: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

39

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Es un sistema global de navegación por satélite (GNSS).

Permite determinar en todo el mundo la posición de un objeto, una persona, un vehículo o una nave, con una precisión hasta de centímetros (si se utiliza GPS diferencial), aunque lo habitual son unos pocos metros de precisión.

Introducción

3. GPS

Page 40: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

40

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

El GPS funciona mediante una red de 24 satélites en órbita sobre el globo, a 20.200 km, con trayectorias sincronizadas para cubrir toda la superficie de la Tierra.

Cuando se desea determinar la posición, el receptor que se utiliza para ello localiza automáticamente como mínimo tres satélites de la red, de los que recibe unas señales indicando la identificación y la hora del reloj de cada uno de ellos.

Introducción

3. GPS

Page 41: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

41

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Address : Una clase que representa un ejemplo de direcciones, un conjunto de cadenas que describen un lugar.

Criteria : Una clase indica los criterios de aplicación para la selección de un proveedor de ubicación.

Geocoder : Una clase para el manejo de geocodificación y geocodificación inversa.

GpsSatellite: Esta clase representa el estado actual de un satélite GPS

Clases del API de GPS

3. GPS

Page 42: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

42

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

GpsStatus: Esta clase representa el estado actual del motor GPS.

Location: Una clase que representa una ubicación geográfica detectada en un momento determinado.

LocationManager: Esta clase proporciona acceso a los servicios de sistema de localización.

LocationProvider: Un superclase abstracta para los proveedores de ubicación.

Clases del API de GPS

3. GPS

Page 43: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

43

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Para usar el API de localización con GPS es necesario añadir al manifiesto este permiso (también incluye la localización :

<Manifiest ... >  <Uses-permission android: name= "android.permission.ACCESS_FINE_LOCATION"  /></ Manifiest>

Localización basada en la red móvil o WiFi

<Manifiest ... >  <Uses-permission android: name= "android.permission.COARSE_FINE_LOCATION"  /></ Manifiest>

Ambos se consideran permisos no seguros a partir de Android 6.

Permisos de GPS

3. GPS

Page 44: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

44

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

La tecnología de Comunicación por campo cercano o Near Field Communication (abreviado NFC) es una tecnología inalámbrica que usa elementos clave de las tarjetas sin contacto (contactless cards, ISO/IEC 14443 A&B and JIS-X 6319-4)

Puede ser compatible con tecnologías ya existentes.

Permite el intercambio de información entre dispositivos que se encuentren a menos de 4 centímetros.

Velocidades de transferencia de 106 kbps, 212 kbps y 424 kbps.

Dispositivos NFC-enabled: bidireccionales.

4. Near Field Communication

Page 45: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

45

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

La tecnología NFC está basada en el acoplamiento de circuitos inductivos. Estos circuitos al encontrarse a menos de

unos pocos centímetros pueden intercambiar energía y datos.

NFC comparte la tecnología básica con RFID (13,56 MHz) y tarjetas sin contacto, pero tiene aspectos clave adicionales.

Los estándares de tarjetas sin contacto en los que se basa NFC no solo regulan los aspectos físicos de circuitos y antenas, sino que abarcan el formato de los datos y la velocidad de transferencias.

Tecnología

4. Near Field Communication

Page 46: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

46

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Lector/grabador (interfaz RF ISO 14443 y FeliCa). Peer-to-Peer. Intercambio de datos entre dos

dispositivos NFC (ISO/IEC 18092). Modo de Emulación de Tarjeta. Para un lector

externo el dispositivo NFC parece una tarjeta sin contacto, permitiendo pagos y uso como tiques electrónicos sin cambiar la infraestructura existente.

Modos de operación de los terminales NFC

4. Near Field Communication

Page 47: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

47

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Formato de intercambio de datos NFC o en inglés NFC Data Exchange Format, abreviado NDEF.

Definición de tipos de registro en inglés Record Type Definition, abreviado RTD. Text, URI, Smart Poster, Generic Control y Signature.

Formatos de datos

4. Near Field Communication

Page 48: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

48

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Cuando un dispositivo Android tiene activa la tecnología NFC puede: Leer una etiqueta NFC con formato NDEF a

través de la elección de una aplicación apropiada a través del sistema de despacho de etiquetas.

Intercambiar mensajes con otro dispositivo NFC con Android Beam™.

NFC en Android

4. Near Field Communication

Page 49: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

49

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Cuando un terminal Android detecta una etiqueta busca una aplicación que pueda manejar ese evento (que se haya registrado para uno de los siguientes intents).: ACTION_NDEF_DISCOVERED: Se ha escaneado una etiqueta

NDEF de un tipo reconocido, abriendo la aplicación con este intent, antes que cualquier otro.

ACTION_TECH_DISCOVERED. Se inicia una aplicación que se haya registrado para este intent si no hay una registrada con el anterior o si el tipo NDEF no puede ser mapeado a un tipo MIME o URI, o si no es un tipo NDEF pero sí de una tecnología conocida.

ACTION_TAG_DISCOVERED. Se arranca si no hay ningún intent registrado para los anteriores.

Para usar la tecnología NFC la aplicación necesita el permiso android.permission.NFC.<uses-permission android:name="android.permission.NFC"/>

NFC en Android

4. Near Field Communication

Page 50: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

50

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

La mínima versión de SDK es la 9, pero sus capacidades para NFC son muy limitadas (solo a través de ACTION_TAG_DISCOVERED).

SDK 10: soporte para operaciones de lectura/escritura y envío de NDEF en segundo plano.

SDK 14: Android Beam SDK 19: Emulación de Contactless Cards

NFC en AndroidVersiones de Android

Para limitar el uso de una aplicación a terminales con tecnología NFC:<uses-feature android:name="android.hardware.nfc"

android:required="true"/>

4. Near Field Communication

Page 51: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

51

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

Filtro para etiqueta del tipo MIME txt/plain:<intent-filter>    <action android:name="android.nfc.action.NDEF_DISCOVERED"/>    <category android:name="android.intent.category.DEFAULT"/>    <data android:mimeType="text/plain" /></intent-filter>

Filtro para una URI concreta: http://developer.android.com/index.html<intent-filter>    <action android:name="android.nfc.action.NDEF_DISCOVERED"/>    <category android:name="android.intent.category.DEFAULT"/>   <data android:scheme="http"              android:host="developer.android.com"              android:pathPrefix="/index.html" /></intent-filter>

NFC en AndroidEjemplos de intent filters ACTION_NDEF_DISCOVERED

4. Near Field Communication

Page 52: Capítulo 2   tecnologías de comunicación inalámbrica para terminales móviles

Tecnologías de comunicación inalámbrica para terminales móvilesServicios Móviles

52

Dpto. de Ingeniería de TelecomunicaciónÁrea de Ingeniería Telemática

Universidad de JaénEscuela Politécnica Superior de Linares

Versión 1.3

public void onResume() {    super.onResume();    ...    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())){        Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);        if (rawMsgs != null) {            msgs = new NdefMessage[rawMsgs.length];            for (int i = 0; i < rawMsgs.length; i++) {                msgs[i] = (NdefMessage) rawMsgs[i];            }        }    }    //process the msgs array}

NFC en AndroidEjemplos de captura de información

4. Near Field Communication