2011-02-03 21 views
6

Kontrolümün tamamen dışında olan bir donanım aygıtıyla konuşmak için bir android uygulaması yazıyorum.Android Sabit kanaldaki RFCOMM yuvası

Uygulamam, listenUsingRfcommWithServiceRecord ve UUID 00001101-0000-1000-8000-00805F9B34FB'yi kullanarak bir dinleme yuvası oluşturur. Daha sonra, uzak cihazın bağlanmasını beklemek için o soket üzerindeki accept() işlevini çağırır, ancak asla yapmaz.

Donanım aygıtının yapımcılarıyla konuştum ve aygıtlarının uzaktaki aygıtta "yalnızca kanal 1'e bağlanacağını" söylüyorlar. Yani, doğru kanal numarasını bulmak için bir SDP keşfi yapmaz. Bunu değiştirmeyi reddettiler (elbette yanlış olsa bile)

Sorum şu ki, sabit bir RFCOMM kanal numarası kullanmak için Android'i zorlamanın herhangi bir yolu var mı? Belki de, istemciye bağlanırken doğrudan createRfcommSocket çağırmanın hilesi gibi yansımayı kullanır. Bu API'ler var, ancak desteklenmiyor.

cevap

1

Hala ilgileniyorsanız, Android 1.5 backport of android.bluetooth için kaynak için kaynak kodunu kontrol edin. Bununla birlikte, desteklenmeyen API'ler olarak gelecekteki sürümlerde kaldırılabilmeleri konusunda uyarılmalıdır.

+0

Cevabınız için teşekkür ederiz. – didster

1

Çok hevesli bir yol, tüm kanalları tüketmek ve istediğinizi bırakmak! Sizinle aynı meseleye sahibim ve bu hack, yaklaşık bir yıldır hiçbir şikayette bulunmadan sahada çalışıyor. Bunun için boşluklar var, bu yüzden başarı kullanım durumunuza bağlı olacaktır.

En fazla 30 kanal var, böylece tanımladığınız UUID ile 30 bağlantı (veya daha az) açacaksınız. Şimdi, spdtool kullanarak istediğiniz sokağa soket bağlantısının UUID'sini bulun. Bu bağlantıyı kapat.

Artık sizin kanalınızdaki kanal, mevcut tek kanal olacaktır. İstediğiniz şekilde bağlayın. Bağlantı kurulduktan sonra diğer tüm bağlantıları kapatın.

Bunun hacker olduğunu biliyorum ama kullanım durumum için çalıştı!

İlgili konular