2010-09-02 47 views
16

Có ai đó đã sử dụng Multicast trên Android 2.2, cụ thể là JmDNS để phát hiện dịch vụ Bonjour. Có rất nhiều câu hỏi & câu trả lời từ khung thời gian Android 1.5-> 2.0, bao gồm trên stackOverflow, cho biết mức độ thành công khác nhau và lỗi trong trình theo dõi lỗi cho biết đã được sửa và đóng cho 2.2 (http://code.google.com/p/android/issues/detail?id=2323). Tôi đã thử các mã nguồn "TuneControl", nhưng mà làm việc trên ~ 1,5 và đã không được cập nhật, và không làm việc cho tôi trên 2,2.Đa phương tiện trên Android 2.2

Vì vậy, các câu hỏi ... 1) Có bất kỳ ai xem hoạt động đa hướng trên 2.2, cụ thể là JmDNS và đặc biệt để phát hiện dịch vụ Bonjour không?

2) Điều gì cần thiết trong mã để thực hiện công việc này?

Tôi đang sử dụng các điều khoản thích hợp:

<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" />

<uses-permission android:name="android.permission.INTERNET"/> 

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 

tôi có được các khóa multicast:

WifiManager wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE); 
if(wifi != null) 
{ 
    MulticastLock mcLock = wifi.createMulticastLock("mylock"); 
    mcLock.acquire(); 
... 

Và sau đó cố gắng bắt đầu jmDNS để tìm kiếm các máy chủ:

mdns = JmDNS.create(addr, HOSTNAME); 
    jmdns.addServiceListener(TOUCH_ABLE_TYPE, listener); 
    jmdns.addServiceListener(DACP_TYPE, listener); 
    ... 

Người nghe không bao giờ thấy bất kỳ dịch vụ nào. Tôi đã xác minh bằng cách sử dụng Wireshark rằng các gói yêu cầu được gửi đi và máy chủ phản hồi, nhưng gói phản hồi không bao giờ được thấy bởi mã trình nghe socket trong thư viện jmDNS.

Vì vậy, tôi có thiếu thứ gì đó không? Đây có phải là lỗi không? Có ai nhận được bất cứ điều gì ngay cả từ xa như thế này để làm việc?

Trả lời

13

Để (trả lời) trả lời câu hỏi của riêng tôi, thông tin khác được cung cấp tại http://code.google.com/p/android/issues/detail?id=2917#c48 bởi một người khác. Cho hậu thế, như họ nói, đây là câu trả lời brian.ro ... @ gmail.com của ...

"Tôi đã dành khá nhiều thời gian gỡ rối các vấn đề mDNS với JmDNS trên Evo tôi và HTC I (CDMA) Những gì tôi tìm thấy có vẻ như là một bộ lọc trong địa điểm trong trình điều khiển không dây Broadcom trên Evo (và kể từ khi tôi nhận được tương tự reprt từ người dùng HTC Desire - với cùng một Bộ lọc, theo mặc định là , chặn bất kỳ lưu lượng phát sóng mạng không unicast hoặc nào, bao gồm cả đa hướng. eory là đó là trình tiết kiệm pin.

Sự cố có vẻ là wpa_supplicant trên Evo không hỗ trợ xóa các bộ lọc đó khi bạn nhận được MulticastLock. (Hãy kiểm tra sản phẩm nhật ký ngay sau khi bạn nhận được khóa và bạn sẽ thấy ý của tôi). Đáng tiếc là những gì đã xảy ra là các nhà cung cấp phần cứng có bị phân mảnh hỗ trợ multicast .... :("

... Vì vậy, dường như đây là một vấn đề thiết bị hơn một vấn đề mã hóa D'oh..: (Nếu tôi có cơ hội thử nghiệm trên thiết bị khác ...

+0

xử lý multicast trên Android thực sự là vấn đề vào thời điểm này (2.2). – jldupont

+1

Tôi nhận được "khóa đa hướng" OK trên thiết bị Samsung Galaxy S của mình nhưng tôi chỉ nhận được các gói tôi đã gửi. Để giải quyết vấn đề này cho ứng dụng của tôi, tôi đang xây dựng một Dịch vụ Web sẽ được sử dụng để "đăng ký" các dịch vụ LAN mà tôi muốn kiểm soát với các thiết bị Android của mình. Bằng cách này, tôi không phụ thuộc vào khả năng phát đa hướng trên phần cứng. – jldupont

7

Tôi đã thực hiện một số nghiên cứu về điều này và tôi tin rằng đó là sự cố với Android nói chung và được khắc phục trong hoặc xung quanh Android 2.3.7.

Đó là một chút quá giai thoại, nhưng đây là những gì tôi đã thử nghiệm:

  • HTC Desire, 2.2, cổ phiếu: không
  • HTC Desire, 2.3.7, CyanogenMod: Thành công
  • Motorola Milestone, 2.1 -update1: thất bại
  • HTC Desire S, 2.3.3: thất bại
  • Acer Iconia A501, 3.2.1: thành công
  • Samsung một cái gì đó, 2.3.3: thất bại
  • HTC Legend, 2.2 Tôi nghĩ rằng: thất bại

Khi tôi nói 'không', trên thực tế tất cả họ đều có thể gửi thông điệp multicast cho các thiết bị 'thành công', nhưng không bao giờ nhận được bất cứ điều gì trở lại, ngoại trừ thông điệp riêng của họ - như jldupont mô tả.

Lưu ý rằng ứng dụng IM đa hướng Kouchat chỉ có sẵn cho 2.3.7 trở đi, mặc dù nó có thể được thực hiện để biên dịch cho đến nay trở lại là 2.1, cung cấp thêm sự tin cậy cho lý thuyết này.

+0

Cảm ơn Rob vì thông tin, tôi mới sử dụng multicast. Bạn có nghĩ rằng tôi sẽ có thể gửi gói multicast từ Android HTC mong muốn API-8 đến Windows PC? – Ahmed

+0

API cấp 8 là 2.2, vì vậy tôi nghĩ rằng bạn sẽ có thể gửi từ Desire đến PC, nhưng Desire sẽ không thể nhận lại bất cứ điều gì. –

+0

Cảm ơn, tôi sẽ thử nó, cho tôi chỉ gửi sẽ là đủ bởi vì tôi android là một máy chủ và khách hàng cần phải khám phá nó .. – Ahmed

1

Tôi nghĩ lý do khác là AP của bạn không hỗ trợ.

khác: Máy tính gửi/nhận được vào/từ Android

máy tính của bạn chỉ được sử dụng WIFI, Best tắt tất cả mạng khác

Các vấn đề liên quan