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

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

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

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

Bluetooth

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

Bluetooth

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

imagem, etc)

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

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

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

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()

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

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

raw data

Bluetooth

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

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

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

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)

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

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")

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

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()

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

Networking

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

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

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

Networking

Fazendo um simples download

import urllib

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

urllib.urlretrieve(url, arquivo)

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

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()

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

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);?>

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

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

http://croozeus.com/

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

Camera

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

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()

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

Camera

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

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

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

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

Camera

camera.take_photo() Retorna um objeto graphics.Image

import camera

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

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

O módulo sysinfo

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

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

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

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

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

Dicas de Organizaçãode um Projeto

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

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)

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

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()

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

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()

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

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()

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

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()

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

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()

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

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)

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

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)

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

Jogos! :)