2017-02-16 380 views
3

在我目前的項目中,它是一個需要發送文件從Windows計算機到Android設備通過藍牙沒有任何東西在電話以外的標準狀態,當然是一個配對藍牙連接。我已經看了pybluez,它似乎很簡單,發送文件之間的客戶端和服務器體系結構(實際上它讓我的筆記本電腦和桌面之間發送相當快),但我不能爲我的生活找到任何方式讓python一旦連接建立,從計算機發送一個文件到android;我曾嘗試從設備抓住似的東西的藍牙MAC地址,像這樣Python藍牙如何發送文件到手機

nearby_devices = bluetooth.discover_devices(
    duration=8, lookup_names=True, flush_cache=True, lookup_class=False) 

再後來嘗試發送的文件,像這樣

port = 1 
for addr, name in nearby_devices: 
    bd_addr = addr 
sock=bluetooth.BluetoothSocket(bluetooth.RFCOMM) 
sock.connect((bd_addr, port)) 

sock.send("download-app") 
sock.close() 

當然與示例腳本由pybluez給出文檔我可以無縫地發送客戶端和服務器之間的文件,但我還是被卡住沒有辦法將文件發送到選定的Android設備(即使我指定它的地址,並知道這是在範圍內)

回答

1

你最那裏的方式......

如你所知,你需要一些東西來跟你的藍牙連接的另一端。您只需將您的自定義服務器替換爲知名服務(通常爲these options之一)即可。

就我而言,我的手機支持「OBEX Object Push」服務,所以我只需要連接到該服務並使用合適的客戶端來說出正確的協議。幸運的是,PyOBEX和PyBluez的組合在這裏訣竅!

下面的代碼(從PyOBEX和PyBluez示例快速打補丁)運行在我的Windows 10,Python 2.7安裝上,並在手機上創建一個簡單的文本文件。

from bluetooth import * 
from PyOBEX.client import Client 
import sys 

addr = sys.argv[1] 
print("Searching for OBEX service on %s" % addr) 

service_matches = find_service(name=b'OBEX Object Push\x00', address = addr) 
if len(service_matches) == 0: 
    print("Couldn't find the service.") 
    sys.exit(0) 

first_match = service_matches[0] 
port = first_match["port"] 
name = first_match["name"] 
host = first_match["host"] 

print("Connecting to \"%s\" on %s" % (name, host)) 
client = Client(host, port) 
client.connect() 
client.put("test.txt", "Hello world\n") 
client.disconnect() 

貌似PyOBEX是一個相當小包裝,不過,是不是Python 3的兼容,所以你可能有一點點移植做,如果這是一個要求。

+0

兄弟...謝謝你。非常感謝你。這是「真正需要我的項目」類型的交易之一;在這種情況下,你可能不僅僅幫助我,還會幫助許多其他人。 –

+0

我做了一個名爲nOBEX的PyOBEX的分支,其中包含一些改進,新功能和錯誤修復以及Python 3支持。你可以看看這裏:https://github.com/nccgroup/nobx – Sultan

2

我沒有親自探索它,但chec K掉這個博客 -

http://recolog.blogspot.com/2013/07/transferring-files-via-bluetooth-using.html

筆者使用lightblue包作爲OBEX協議的API,並通過該連接發送文件。現在淺藍色包似乎沒有維護。還有其他一些軟件包,比如PyObex(我無法以任何理由無法導入),您也可以作爲替代品進行探索,但淺藍色似乎是要走的路。

+0

我的意思是我已經查看過這個確切的頁面大概十次;問題來自於基於* nix的lightblue和基於Windows的此項目使用的目標操作系統。我的想法到目前爲止,我不得不在c寫我自己的圖書館來完成這個 –

+1

我明白了。這似乎是問題是,Windows不支持openOBEX這是所有基於。但我有一個不尋常的想法,可能會有點修補。你可能能夠自定義pybluez模塊使用FTP發送?我不確定你是否需要obexftp,openobex或android設備上的任何其他東西,但安裝這些應該是一件很簡單的事情。對不起,我無法提供更多幫助。 –

+0

老實說,我結束了敲我的頭撞在牆上,但由於某些原因,它仍然阻止我的電話了幾天之後發現一個OBEX庫。它看起來像是對我來說 –

相關問題