2013-07-23 52 views
10

Tôi không có chuyên gia Bluetooth và tự hỏi khả năng nào có thể tìm thấy các thiết bị Bluetooth đã ghép nối tự động khi chúng nằm trong phạm vi của nhau.Tự động tìm các thiết bị bluetooth đã ghép nối khi chúng ở trong phạm vi

Bối cảnh: Trong trường hợp của chúng tôi, ứng dụng Android cần kết nối với phụ kiện chuyên dụng qua Bluetooth (Rfcomm). Cả hai thiết bị đều được biết đến với nhau (chúng được ghép nối). Ứng dụng Android đăng ký bộ thu phát sóng. Trong khi khởi động ứng dụng, ứng dụng bắt đầu khám phá để tìm phụ kiện chuyên dụng. Nếu phụ kiện nằm trong phạm vi mọi thứ hoạt động tốt.

Sự cố: Người dùng khởi động ứng dụng bên ngoài phạm vi phụ kiện chuyên dụng. Ứng dụng Android cố gắng khám phá phụ kiện mà không thành công. Sau đó, người dùng đi vào phạm vi phụ kiện Bluetooth. Người nhận phát sóng sẽ không được thông báo về phụ kiện hiện đang ở trong phạm vi phủ sóng.

Similar Threads/Giải pháp có thể câu hỏi tương tự đã được hỏi về stackoverflow (ví dụ autoconnect to bluetooth device when in range). Nhưng liên tục cố gắng để khám phá các thiết bị Bluetooth trong phạm vi không phải là những gì tôi đang tìm kiếm bởi vì điều này sẽ gây ra quá nhiều hao pin của thiết bị Android.

Một giải pháp khác là cố gắng kết nối với thiết bị được ghép nối trong phương pháp onResume của Hoạt động. Điều này sẽ hoạt động nhưng có bất lợi là ứng dụng không thể chạy trong nền. Vì vậy, người dùng phải đưa ứng dụng ít nhất một lần vào nền trước để bắt đầu kết nối.

Ý tưởng thứ ba mà tôi đã nghĩ đến là triển khai ổ cắm máy chủ vào ứng dụng Android. Khi ứng dụng android được bắt đầu và khám phá kết thúc mà không thành công, ứng dụng Android có thể tạo ổ cắm máy chủ và nghe thông báo đến của phụ kiện. Điều này sẽ giúp trong một số trường hợp (ví dụ: người dùng bắt đầu ứng dụng của mình, tiếp cận phụ kiện, kích hoạt phụ kiện và phụ kiện thông báo cho ứng dụng khi khởi động rằng nó đang ở trong phạm vi hiện tại). Nhưng điều này vẫn không có giải pháp 100% vì cả hai thiết bị có thể bắt đầu bên ngoài phạm vi của nhau. Ngoài ra nó sẽ là bắt buộc để thực hiện chức năng bổ sung (ổ cắm máy chủ Bluetooth trong thiết bị Android ...).

Vì vậy, tôi tự hỏi nếu các giải pháp tốt hơn tồn tại. Tôi đang tìm một giải pháp mà không cần thêm Ổ cắm máy chủ và tôi luôn nhận được thông báo rằng hai thiết bị đã ghép nối nằm trong phạm vi của nhau :-)

Cảm ơn bạn đã trợ giúp!

+0

Tôi sẽ đi theo giải pháp thứ 2 của bạn trong đó điện thoại cố gắng kết nối phụ kiện mà không tìm kiếm giống nhau, lấy ví dụ về điện thoại và tai nghe, nếu được kết nối và 1 phạm vi, thông thường tai nghe cố gắng kết nối với các thiết bị đã ghép nối trước đó trong một khoảng thời gian cụ thể (tùy thuộc vào việc thực hiện tai nghe). – ashish

+0

Hey! Cảm ơn vì đã trả lời. Nhược điểm của giải pháp thứ hai là điều này phải được kích hoạt bằng cách nào đó (ví dụ: onResume). Trong trường hợp onResume người dùng phải đưa ứng dụng vào nền trước. Tôi đang tìm kiếm một khả năng để làm điều đó tự động vào đúng thời điểm để làm cho nó dễ dàng cho người sử dụng :-) – mheymel

+0

Có thể không có một dịch vụ đang chạy trong nền mà sẽ chăm sóc thiết bị bluetooth kết nối/tìm kiếm – ashish

Trả lời

0

Không phải là giải pháp đầy đủ, nhưng có thể nó đủ để ứng dụng của bạn có thể thăm dò ý kiến ​​của sự hiện diện của tài khoản bất cứ khi nào màn hình được bật? Trong trường hợp đó, điều này có thể hữu ích: Start Activity on wake up/sleep in Android

+0

Hey. Cảm ơn vì đã trả lời! Đây cũng là một giải pháp tốt (tốt hơn là giải pháp "onResume"). Nhưng bạn đúng, vẫn không phải là giải pháp 100%. Sau khi có một cái nhìn về ACL và các thông điệp cấp thấp nó có vẻ là cách tốt nhất để sử dụng giải pháp 3 - vì chúng ta đang có sự thoải mái của một phụ kiện chuyên dụng. [link] (http://stackoverflow.com/questions/9537833/what-triggers-the-bluetoothdevice-action-acl-broadcasts) – mheymel

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