Air superiority for Android Apps
-
Upload
saul-diaz -
Category
Technology
-
view
1.049 -
download
0
description
Transcript of Air superiority for Android Apps
SUPERIORIDAD AÉREAEN APLICACIONES ANDROID
Saúl Díaz Gonzá[email protected]
Wi-Fi 802.11 N
Bluetooth 3.0 + HS
Near-Field Comm.
“¿Cómo mejorarlo? Le pondremos Bluetooth. ¡Todo es mejor con Bluetooth!”
-Sheldon Cooper
Búsqueda
Aceptar
Conectar
Descubrimiento
¡Emparejados!
Conectar
Cre
arDescubrir
BluetoothAdapter
BluetoothDevice
BluetoothAdapter
BluetoothSocket
BluetoothServerSocket
Aceptar
Clases clave
BLUETOOTHBLUETOOTH_ADMIN
mBtAdapter = BluetoothAdapter.getDefaultAdapter();
mBtAdapter == null?
Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);startActivityForResult(intent, REQUEST_ENABLE_BT);
Si
Activando el Bluetooth
DescubrimientoCliente Servidor
mBtAdapter.startDiscovery();Intent(BluetoothAdapter.
ACTION_REQUEST_DISCOVERABLE);Intent.putExtra(BluetoothAdapter.
EXTRA_DISCOVERABLE_DURATION,300);
IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(mReceiver, filter);
intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
ConexiónCliente Servidor
mBtAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);
serverSocket.accept();
btDevice.createRfcommSocketToServiceRecord( MY_UUID);
clientSocket.connect();
in = socket.getInputStream();out = socket.getOutputStream();in.read(buffer) //Buffer is byte[]out.write(buffer)
“Cualquier tecnología lo suficientemente avanzada es indistinguible de la magia”
-Arthur C. Clarke
Android Beam
Write Read
NFC Tag
Header Payload
Identifier Length Type
NFC Data Exchange Format (NDEF)
Record1 Record2 ... RecordN
Requisitos NFC
NFC
Uses Permission Intent Filter
android.nfc.action.NDEF_DISCOVERED
Leer un mensaje NDEF
public void onNewIntent(Intent intent) { if (NfcAdapter.ACTION_NDEF_DISCOVERED. equals(intent.getAction())) { Parcelable[] rawMsgs = intent.
getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
NdefMessage[] msgs; if (rawMsgs != null) { msgs = new NdefMessage[rawMsgs.length]; for (int i = 0; i < rawMsgs.length; i++) { msgs[i] = (NdefMessage) rawMsgs[i]; } }
//Process Messages }}
Opciones de dispatching
NFC ForegroundDispatch
Classic Intent Dispatch
Android AppRecord
mNfcAdapter.enableForegroundDispatch(...);
mNfcAdapter.disableForegroundDispatch(this);
NdefRecord.createApplicationRecord(“com.example.nfc.beam”);
Escribir en una Tag
private void write(Tag tag) throws IOException, FormatException {
NdefRecord[] records = { createRecord() }; NdefMessage message = new NdefMessage(records);
// Get an instance of Ndef for the tag. Ndef ndef = Ndef.get(tag);
// Enable I/O ndef.connect();
// Write the message ndef.writeNdefMessage(message);
// Close the connection ndef.close();}
Android Beam
public class BluetoothChat extends Activity implements CreateNdefMessageCallback{
@Overridepublic NdefMessage createNdefMessage(NfcEvent event) {
try {NdefRecord[] records = { createRecord() };NdefMessage message = new NdefMessage(records);
return message;} catch (UnsupportedEncodingException e) {
//Handle error here}return null;
}
Demo time!
“Chuck Norris puede estrangular a un hombre con el cable de una conexión Wi-Fi.”
-Proverbio chino
BT 2.1 WiFi 11g WiFi 11n
1x
28x
200x
BT 3.0+HS
12x
Group Owner
Peers
Ice CreamSandwich
Permisos
ACCESS_WIFI_STATECHANGE_WIFI_STATE
CHANGE_NETWORK_STATEINTERNET
ACCESS_NETWORK_STATE
Requisitos Wi-Fi Direct
WIFI_P2P_CONNECTION_CHANGED_ACTION
WIFI_STATE_CHANGED_ACTION WIFI_P2P_PEERS_CHANGED_ACTION
WIFI_P2P_THIS_DEVICE_CHANGED_ACTION
Con un receiver voy sobrado
Listener Métodos Eventos
ActionListenerconnect(),
cancelConnect(),...onSuccess()onFailure()
ChannelListener initialize() onChannelDisconnected()
ConnectionInfoListener requestConnectInfo() onConnectionAvailable()
GroupInfoListener requestGroupInfo() onGroupInfoAvailable()
PeerListListener requestPeers() onPeersAvailable()
Y esto es todo lo que hay que saber
¡Peer a la vista!
mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
mChannel = mManager.initialize(this, getMainLooper(), null);mReceiver = new WiFiDirectBroadcastReceiver(mManager,mChannel,this); mManager.discoverPeers(channel, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { //success logic }
@Override public void onFailure(int reasonCode) { //failure logic } });
if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) { if (mManager != null) { mManager.requestPeers(mChannel, new PeerListListener(){
@Override public void onPeersAvailable(WifiP2pDeviceList list) { //Update Peer List, data model, etc... } }); }}
Mientras en el receiver...
WifiP2pDevice device = new WifiP2pDevice();WifiP2pConfig config = new WifiP2pConfig();config.deviceAddress = device.deviceAddress;mManager.connect(mChannel, config, new ActionListener() {
@Override public void onSuccess() { //ready for connecting through a socket }
@Override public void onFailure(int reason) { //failure logic }});
Frecuencias de llamadas abiertas
Superioridad aérea
Mágico
Sencillo