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

366 views

Published on

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

Published in: Software
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
366
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
9
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. Implementação de Aplicações Móveis e Jogos com Python
  2. 2. Bluetooth
  3. 3. Bluetooth  OBEX (OBject EXchange)  Protocolo Bluetooth voltado pra transmissão de arquivos (audio, imagem, etc)
  4. 4. 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
  5. 5. 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()
  6. 6.  RFCOMM (Radio Frequency COMMunication)  Protocolo Bluetooth para transmissão (RX e TX) de texto ou raw data Bluetooth
  7. 7.  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
  8. 8. 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)
  9. 9. 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")
  10. 10. 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()
  11. 11. Networking
  12. 12. 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
  13. 13. Networking  Fazendo um simples download import urllib url = “http://pagina/arquivo.html” arquivo = “C:Dataarquivo.txt” urllib.urlretrieve(url, arquivo)
  14. 14. 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()
  15. 15. 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); ?>
  16. 16. Série 'Network Programming for s60' do Marcelo Barros http://croozeus.com/
  17. 17. Camera
  18. 18. 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()
  19. 19. Camera  ViewFinder  Feedback pro usuário sobre a posição da imagem
  20. 20. 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
  21. 21. Camera  camera.take_photo()  Retorna um objeto graphics.Image import camera foto = camera.take_photo() foto.save(“C:Imagesfoto.jpg”)
  22. 22. O módulo sysinfo
  23. 23.  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
  24. 24.  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
  25. 25. Dicas de Organização de um Projeto
  26. 26.  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)
  27. 27.  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()
  28. 28.  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()
  29. 29.  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()
  30. 30.  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()
  31. 31.  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()
  32. 32.  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)
  33. 33.  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)
  34. 34. Jogos! :)

×