Implementação de Aplicações Móveis
e Jogos com Python
Review
 3ª Aula
 Mais appuifw
 Title, body, menus
 Teclado
 Graphics e Canvas
 Data Handling
 Um pouco de jogos :-)
Pra Hoje...
 4ª Aula
 Fim do Appuifw
 Forms e tabs
 Exercícios
 Bluetooth
 Networking
 Camera
 O módulo sysinfo
 ...
Appuifw:
Forms e Tabs
Appuifw.Form
 appuifw.Form
 Objeto de formulários da s60
 Recebe no construtor uma lista de tuplas e
seu tipo de edição...
Appuifw.Form
 appuifw.Form
 Objeto de formulários da s60
 Tem os seguintes atributos
 Flags
 FFormEditModeOnly – Acei...
Appuifw.Form
 appuifw.Form
 Objeto de formulários da s60
 Tem os seguintes Métodos
 Execute()
 Apresenta a Form na UI...
Appuifw.Form
import appuifw
modelos = [u'e61',u'xpressmusic',u'iphone']
fields = [(u'Company','text'), (u'Model', 'combo',...
Appuifw.Form
import appuifw, time
models = [u"6600", u"6630", u"7610", u"N90", u"N70"]
fields = [(u"Company", 'text', u"No...
PyS60 – Exercício 1
Exerc cio!í
Crie uma Agenda de Contatos. O usuário será capaz de
escolher entre adicionar pessoas a ag...
PyS60 – Exercício 2
Exerc cio!í
Criar uma aplicação que capture eventos do teclado e chame
funções da appuifw (query e not...
PyS60 – Exercício 3
Exerc cio!í
Criar uma aplicação que, a cada evento gerado do joystick,
mude a cor do body.
Criar també...
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 s...
Bluetooth
 Enviando uma foto
import camera, e32, socket, appuifw
foto = u"C:Imagesarquivo_foto.jpg"
def enviar_foto():
ad...
 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...
Bluetooth
 Fazendo um CHAT – Lado Servidor
import socket, appuifw
def chat_server():
server = socket.socket(socket.AF_BT,...
Bluetooth
 Fazendo um CHAT – Lado Cliente
def chat_client():
conn = socket.socket(socket.AF_BT, socket.SOCK_STREAM)
addre...
Bluetooth
 Fazendo um CHAT – Comum
def receive_msg(fd):
print "Esperando a mensagem.."
reply = fd.readline()
print "Receb...
Networking
Networking
 Maneiras de acessar servidores
 Computação Distribuída
 Módulos de Acesso
 httplib, urllib (core)
 json.p...
Networking
 Fazendo um simples download
import urllib
url = “http://pagina/arquivo.html”
arquivo = “C:Dataarquivo.txt”
ur...
Networking
 Comunicando-se através de POST
 Lado Cliente (Celular)
import httplib, urllib, appuifw
def senddata():
param...
Networking
 Comunicando-se através de POST
 Lado Servidor (PHP!)
<?php
$data = $_REQUEST['data'];
$filename = 'textfile....
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(...
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.a...
Camera
 camera.take_photo()
 Retorna um objeto graphics.Image
import camera
foto = camera.take_photo()
foto.save(“C:Imag...
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.i...
 Módulo responsável por informações do sistema
 sysinfo.free_drivespace()
 Retorna o espaço livre em bytes em cada driv...
Dicas de Organização
de 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 ...
 Várias Classes em um só arquivo
 Arquivo: funcionarios.py
 Classes:
 Presidente
 Diretor
 Estagiario
Namespace e Di...
 Várias Classes em um só arquivo (Exemplo II)
 Arquivo: funcionarios.py
 Classes:
 Presidente
 Diretor
 Estagiario
N...
 Pacotes
 Pasta: conexoes/
 Arquivo __init__.py (vazio)
 Arquivos:
 bluetooth.py → Classes Server e Client
 wireless...
 Pacotes (Exemplo II)
 Pasta: conexoes/
 Arquivo __init__.py (vazio)
 Arquivos:
 bluetooth.py → Classes Server e Clie...
 Pacotes (Exemplo III)
 Pasta: conexoes/
 Arquivo __init__.py (vazio)
 Arquivos:
 bluetooth.py → Classes Server e Cli...
 Dicas:
 Crie uma pasta pra seu programa:
 Deixe uma pasta do seu programa para os códigos (src)
 Deixe outra pasta pa...
 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.
Na...
Projetos!
Próximos SlideShares
Carregando em…5
×

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

6.155 visualizações

Publicada em

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

Publicada em: Software
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
6.155
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
16
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

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

  1. 1. Implementação de Aplicações Móveis e Jogos com Python
  2. 2. Review  3ª Aula  Mais appuifw  Title, body, menus  Teclado  Graphics e Canvas  Data Handling  Um pouco de jogos :-)
  3. 3. Pra Hoje...  4ª Aula  Fim do Appuifw  Forms e tabs  Exercícios  Bluetooth  Networking  Camera  O módulo sysinfo  Dicas de um Projeto  Definição dos grupos e Projetos
  4. 4. Appuifw: Forms e Tabs
  5. 5. Appuifw.Form  appuifw.Form  Objeto de formulários da s60  Recebe no construtor uma lista de tuplas e seu tipo de edição.  (nome,tipo[,valor default])  Nome é um unicode  Tipo pode ser:  'text'  'number'  'date'  'time'  'combo'  'float'
  6. 6. Appuifw.Form  appuifw.Form  Objeto de formulários da s60  Tem os seguintes atributos  Flags  FFormEditModeOnly – Aceita edição  FFormViewModeOnly – Não aceita edição  Menu  Recebe uma lista de tuplas (titulo, callback)  Callback é uma referencia a função  Titulo é um unicode
  7. 7. Appuifw.Form  appuifw.Form  Objeto de formulários da s60  Tem os seguintes Métodos  Execute()  Apresenta a Form na UI  insert()  Insere itens ao Form  Pop() e length()  save_hook()
  8. 8. Appuifw.Form import appuifw modelos = [u'e61',u'xpressmusic',u'iphone'] fields = [(u'Company','text'), (u'Model', 'combo', (modelos,0))] myForm = appuifw.Form( fields, flags=appuifw.FFormEditModeOnly) myForm.execute()  Exemplo 1
  9. 9. Appuifw.Form import appuifw, time models = [u"6600", u"6630", u"7610", u"N90", u"N70"] fields = [(u"Company", 'text', u"Nokia"), (u"Model", 'combo', (models, 0)), (u"Amount",'number', 1), (u"Date", 'date', time.time()), (u"Time", 'time')] saved = False def save(arg): global saved saved = True return True myForm = appuifw.Form(fields, flags=appuifw.FFormEditModeOnly) myForm.save_hook = save myForm.execute() if saved == True: print myForm[0][2], models[myForm[1][2][1]], myForm[2][2] print time.strftime("%d/%m/%Y", time.localtime(myForm[3][2])) print time.strftime(time.ctime(myForm[4][2])[11:20])  Exemplo 2
  10. 10. PyS60 – Exercício 1 Exerc cio!í Crie uma Agenda de Contatos. O usuário será capaz de escolher entre adicionar pessoas a agenda (onde o programa pede Nome e Telefone da pessoa) ou buscar pelo nome usando uma multi_selection list. Ao selecionar o nome da pessoa, o programa deverá imprimir em um appuifw.Text() o Nome da pessoa e o Telefone dela. Ao selecionar o menu novamente o appuifw.Text() deverá ser apagado. É desejável que o programa utilize Orientação a Objetos.
  11. 11. PyS60 – Exercício 2 Exerc cio!í Criar uma aplicação que capture eventos do teclado e chame funções da appuifw (query e note, por exemplo.) É desejável que o programa utilize Orientação a Objetos, com bibliotecas de captura de eventos e de gerência dos callbacks.
  12. 12. PyS60 – Exercício 3 Exerc cio!í Criar uma aplicação que, a cada evento gerado do joystick, mude a cor do body. Criar também um menu (popup_menu) com a escolha de escrever um nome (query). Esse nome escrito irá aparecer no meio da tela com a cor preta (usando canvas.text ao invés de appuifw.text).
  13. 13. Bluetooth
  14. 14. Bluetooth  OBEX (OBject EXchange)  Protocolo Bluetooth voltado pra transmissão de arquivos (audio, imagem, etc)
  15. 15. Bluetooth  OBEX (OBject EXchange)  Protocolo Bluetooth voltado pra transmissão de arquivos (audio, imagem, etc)  Para scan de dispositivos OBEX: import socket endereco, servicos = socket.bt_obex_discover() print endereco,servicos
  16. 16. Bluetooth  Enviando uma foto import camera, e32, socket, appuifw foto = u"C:Imagesarquivo_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 = canvas appuifw.app.exit_key_handler = quit appuifw.app.menu = [(u"Tirar Foto", tirar_foto), (u"Enviar", enviar_foto)] app_lock = e32.Ao_lock() app_lock.wait()
  17. 17.  RFCOMM (Radio Frequency COMMunication)  Protocolo Bluetooth para transmissão (RX e TX) de texto ou raw data Bluetooth
  18. 18.  RFCOMM (Radio Frequency COMMunication)  Protocolo Bluetooth para transmissão (RX e TX) de texto ou raw data  Para scan de dispositivos RFCOMM: Bluetooth import socket endereco, servicos = socket.bt_discover() print endereco,servicos
  19. 19. 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)
  20. 20. 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")
  21. 21. 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()
  22. 22. Networking
  23. 23. 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
  24. 24. Networking  Fazendo um simples download import urllib url = “http://pagina/arquivo.html” arquivo = “C:Dataarquivo.txt” urllib.urlretrieve(url, arquivo)
  25. 25. 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()
  26. 26. 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); ?>
  27. 27. Série 'Network Programming for s60' do Marcelo Barros http://croozeus.com/
  28. 28. Camera
  29. 29. 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()
  30. 30. Camera  ViewFinder  Feedback pro usuário sobre a posição da imagem
  31. 31. 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 = quit camera.start_finder(viewfinder) lock = e32.Ao_lock() lock.wait() Camera  ViewFinder  Feedback pro usuário sobre a posição da imagem
  32. 32. Camera  camera.take_photo()  Retorna um objeto graphics.Image import camera foto = camera.take_photo() foto.save(“C:Imagesfoto.jpg”)
  33. 33. O módulo sysinfo
  34. 34.  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
  35. 35.  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
  36. 36. Dicas de Organização de um Projeto
  37. 37.  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)
  38. 38.  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()
  39. 39.  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()
  40. 40.  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.bluetooth import conexoes.wireless bt = conexoes.bluetooth.Client() wifi = conexoes.wireless.AccessPoint()
  41. 41.  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()
  42. 42.  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()
  43. 43.  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:DataMinhaAplicação” if not os.path.exists(PATH): os.makedirs(PATH) import os, os.path Sources = u”C:DataMinhaAplicaçãosrc” if not os.path.exists(Sources): os.makedirs(Sources)
  44. 44.  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:DataMinhaAplicaçãosrc” sys.path.append(Sources)
  45. 45. Projetos!

×