Implementação de Aplicações Móveis e Jogos com Python - Aula 5

Post on 06-Jun-2015

98 views 1 download

description

Implementação de Aplicações Móveis e Jogos com Python

Transcript of Implementação de Aplicações Móveis e Jogos com Python - Aula 5

Implementação de Aplicações Móveis e Jogos com Python

Bluetooth

Bluetooth

OBEX (OBject EXchange) Protocolo Bluetooth voltado pra transmissão de arquivos (audio,

imagem, etc)

Bluetooth

OBEX (OBject EXchange) Protocolo Bluetooth voltado pra transmissão de arquivos (audio,

imagem, etc) Para scan de dispositivos OBEX:

import socketendereco, servicos = socket.bt_obex_discover()print endereco,servicos

Bluetooth Enviando uma foto

import camera, e32, socket, appuifwfoto = u"C:\\Images\\arquivo_foto.jpg"

def enviar_foto(): address, services = socket.bt_obex_discover() if u'OBEX Object Push' in services: channel = services[u'OBEX Object Push'] socket.bt_obex_send_file(address, channel, arquivo_foto) appuifw.note(u"Foto enviada!", "info") else: appuifw.note(u"Dispositivo não preparado.", "error")

def tirar_foto(): photo = camera.take_photo() canvas.blit(photo) photo.save(arquivo_foto)

def quit(): app_lock.signal()

canvas = appuifw.Canvas()appuifw.app.body = canvasappuifw.app.exit_key_handler = quitappuifw.app.menu = [(u"Tirar Foto", tirar_foto), (u"Enviar", enviar_foto)]app_lock = e32.Ao_lock()app_lock.wait()

RFCOMM (Radio Frequency COMMunication) Protocolo Bluetooth para transmissão (RX e TX) de texto ou

raw data

Bluetooth

RFCOMM (Radio Frequency COMMunication) Protocolo Bluetooth para transmissão (RX e TX) de texto ou

raw data Para scan de dispositivos RFCOMM:

Bluetooth

import socketendereco, servicos = socket.bt_discover()print endereco,servicos

Bluetooth

Fazendo um CHAT – Lado Servidor

import socket, appuifw

def chat_server(): server = socket.socket(socket.AF_BT, socket.SOCK_STREAM) channel = socket.bt_rfcomm_get_available_server_channel(server) server.bind(("", channel)) server.listen(1) socket.bt_advertise_service(u"NossoChat", server, True, socket.RFCOMM) socket.set_security(server, socket.AUTH | socket.AUTHOR) appuifw.note(u”Esperando Conexão”) conn, client_addr = server.accept() appuifw.note(u”Conectado!”) talk(conn, None)

Bluetooth

Fazendo um CHAT – Lado Cliente

def chat_client(): conn = socket.socket(socket.AF_BT, socket.SOCK_STREAM) address, services = socket.bt_discover() if 'NossoChat' in services: channel = services[u'btchat'] conn.connect((address, channel)) appuifw.note(u”Conectado!”) talk(None, conn) else: appuifw.note(u"O celular não está rodando o chat.", "error")

Bluetooth Fazendo um CHAT – Comum

def receive_msg(fd): print "Esperando a mensagem.." reply = fd.readline() print "Recebido: " + reply appuifw.note(unicode(reply), "info")

def send_msg(fd): msg = appuifw.query(u"Envie:", "text") print "Enviado: " + msg print >> fd, msg

def talk(client, server): try: if server: fd = server.makefile("rw", 0) receive_msg(fd) if client: fd = client.makefile("rw", 0) while True: send_msg(fd) receive_msg(fd

except: appuifw.note(u"Desconectou", "info") if client: client.close() if server: server.close()

index = appuifw.popup_menu([u"Servir", u"Conectar"])if index != None: if index: chat_client() else: chat_server()

Networking

Networking

Maneiras de acessar servidores Computação Distribuída

Módulos de Acesso httplib, urllib (core) json.py (Patric Logan)

http://meu-ip/json.py

Networking

Fazendo um simples download

import urllib

url = “http://pagina/arquivo.html”arquivo = “C:\\Data\\arquivo.txt”

urllib.urlretrieve(url, arquivo)

Networking

Comunicando-se através de POST Lado Cliente (Celular)

import httplib, urllib, appuifw

def senddata():params = urllib.urlencode({'data': "Flavio"})headers = {"Content-type": "application/x-www-form-urlencoded","Accept":

"text/plain"}conn = httplib.HTTPConnection("www.flavioribeiro.com")appuifw.note(u'Espere...')conn.request("POST", "/exemplo.php", params, headers)response = conn.getresponse()uniresponse = unicode(response.read())conn.close()appuifw.note(uniresponse)

senddata()

Networking

Comunicando-se através de POST Lado Servidor (PHP!)

<?php$data = $_REQUEST['data'];$filename = 'textfile.txt';$handle = fopen($filename, 'a+');$text="\n";fwrite($handle, $data);fwrite($handle, $text);echo 'Post com Sucesso!';fclose($handle);?>

Série 'Network Programming for s60'do Marcelo Barros

http://croozeus.com/

Camera

Camera

Módulo responsável por interação direta com a(s) camera(s)

Alguns métodos:

cameras_available() image_modes() flash_modes() max_zoom() take_photo()

Camera

ViewFinder Feedback pro usuário sobre a posição da imagem

import camera, appuifw, e32

def viewfinder(img): canvas.blit(img)

def quit(): camera.stop_finder() lock.signal()

appuifw.app.body = canvas = appuifw.Canvas()appuifw.app.exit_key_handler = quitcamera.start_finder(viewfinder)lock = e32.Ao_lock()lock.wait()

Camera

ViewFinder Feedback pro usuário sobre a posição da imagem

Camera

camera.take_photo() Retorna um objeto graphics.Image

import camera

foto = camera.take_photo()foto.save(“C:\\Images\\foto.jpg”)

O módulo sysinfo

Módulo responsável por informações do sistema

sysinfo.battery() Retorna o nivel da bateria (entre 0 e 7)

sysinfo.imei() Retorna o número de identificação do celular

sysinfo.active_profile() Retorna o perfil utilizado no momento (Silencioso, Reunião,

etc)

sysinfo.display_pixels() Retorna o tamanho da tela em pixels (muito importante)

Sysinfo

Módulo responsável por informações do sistema

sysinfo.free_drivespace() Retorna o espaço livre em bytes em cada drive {u'C:': 58463232, u'D:': 9494528, u'Z:': 0}

sysinfo.total_ram() Retorna o tamanho da memória RAM

sysinfo.free_ram() Retorna a memória RAM livre

sysinfo.signal_bars() Retorna o sinal da antena (de 0 a 7)

sysinfo.sw_version() Versão do firmware

Sysinfo

Dicas de Organizaçãode um Projeto

Várias funções em um só arquivo Arquivo: operacoes.py Funções:

soma(x,y) subtrai(x,y) divide(x,y)

Namespace e Dicas de um projeto Python

import operacoes

operacoes.soma(10,20)operacoes.divide(100,2)

Várias Classes em um só arquivo Arquivo: funcionarios.py Classes:

Presidente Diretor Estagiario

Namespace e Dicas de um projeto Python

import funcionarios

flavio = funcionarios.Estagiario()

lucas = funcionarios.Presidente()

flavio.trabalha()lucas.toma_cafe()

Métodos trabalha() toma_cafe()

Várias Classes em um só arquivo (Exemplo II) Arquivo: funcionarios.py Classes:

Presidente Diretor Estagiario

Namespace e Dicas de um projeto Python

from funcionarios import *

flavio = Estagiario()

lucas = Presidente()

flavio.trabalha()lucas.toma_cafe()

Métodos trabalha() toma_cafe()

Pacotes Pasta: conexoes/ Arquivo __init__.py (vazio) Arquivos:

bluetooth.py → Classes Server e Client wireless.py → Classes AccessPoint e Client

Namespace e Dicas de um projeto Python

import conexoes.bluetoothimport conexoes.wireless

bt = conexoes.bluetooth.Client()

wifi = conexoes.wireless.AccessPoint()

Pacotes (Exemplo II) Pasta: conexoes/ Arquivo __init__.py (vazio) Arquivos:

bluetooth.py → Classes Server e Client wireless.py → Classes AccessPoint e Client

Namespace e Dicas de um projeto Python

from conexoes import bluetooth

bt = bluetooth.Client()

Pacotes (Exemplo III) Pasta: conexoes/ Arquivo __init__.py (vazio) Arquivos:

bluetooth.py → Classes Server e Client wireless.py → Classes AccessPoint e Client

Namespace e Dicas de um projeto Python

from conexoes.bluetooth import Server

bt = Server()

Dicas: Crie uma pasta pra seu programa:

Deixe uma pasta do seu programa para os códigos (src) Deixe outra pasta para Arquivos no geral (files) Crie outras necessárias

Namespace e Dicas de um projeto Python

import os, os.path

PATH = u”C:\\Data\\MinhaAplicação”if not os.path.exists(PATH): os.makedirs(PATH)

import os, os.path

Sources = u”C:\\Data\\MinhaAplicação\\src”if not os.path.exists(Sources): os.makedirs(Sources)

Dicas: Coloque a pasta de códigos no seu Python Path

Assim ele será visível e poderá ser incluído nos seus códigos.

Namespace e Dicas de um projeto Python

import sys

Sources = u”C:\\Data\\MinhaAplicação\\src”sys.path.append(Sources)

Jogos! :)