Upload
flavio-ribeiro
View
98
Download
1
Embed Size (px)
DESCRIPTION
Implementação de Aplicações Móveis e Jogos com Python
Citation preview
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! :)