2015-01-25 14 views
7

Tôi đang cố gắng sử dụng thư viện Paho Android MQTT (downloaded from here).
Mẫu 'ứng dụng dịch vụ' hoạt động tốt, phương pháp 'đăng ký' và 'xuất bản' cũng hoạt động tốt khi ứng dụng mẫu đang chạy.
Khi tôi 'đóng', thiết bị sẽ không nhận được thông báo tin nhắn nữa.
Có ai có kinh nghiệm làm thế nào để sửa đổi/thực hiện dịch vụ một cách chính xác để nhận tin nhắn ngay cả khi ứng dụng không chạy?Paho MQTT Dịch vụ Android đánh thức hoạt động

Cảm ơn!

+1

Bạn có bao giờ có thể giải quyết vấn đề của mình không? Tôi đang chạy vào một vấn đề tương tự đang cố gắng giữ cho dịch vụ chạy ngay cả sau khi ứng dụng đã bị đóng. –

+1

Chưa. Thật không may tôi đang quá bận rộn bây giờ (tại nơi làm việc) để đối phó với dự án sở thích này, nhưng tôi sẽ gửi cho bạn giải pháp của tôi, Nếu tôi có thể làm cho nó hoạt động. – wyzard

+0

Tôi đã thực hiện một số tiến bộ. Tôi đã triển khai một dịch vụ (START_STICKY), có chứa các phương thức MqttClient object (và setCallback, connect, subscribe etc.). Bằng cách này tôi đã đạt được, ứng dụng của tôi nhận được thông báo gọi lại ngay cả khi hoạt động của tôi không hoạt động. Hiện tại vấn đề của tôi là: trên các thiết bị Xiaomi tôi không thể thực hiện tính năng 'bắt đầu dịch vụ khi khởi động', vì MIUI có một thành phần Bảo mật tích hợp, từ chối nó, nhưng đây là một vấn đề khác. – wyzard

Trả lời

1

Bạn nên thực hiện một thấy dịch vụ nền: http://developer.android.com/training/run-background-service/index.html

Hoặc tùy thuộc vào trường hợp sử dụng bạn có thể thực hiện thông báo đẩy ở phía máy chủ và nhận được chúng một khi khách hàng không đăng ký với các nhà môi giới MQTT.

+0

Cảm ơn bạn, tôi sẽ thử điều này. – wyzard

+0

Xem mẫu dịch vụ MQTT Paho Android tại đây: http://git.eclipse.org/c/paho/org.eclipse.paho.mqtt.java.git/tree/org.eclipse.paho.android.service/org. eclipse.paho.android.service.sample – Teixi

3

Dịch vụ Mqtt bằng cách nào đó là thư viện hơn là dịch vụ chung. Nó chỉ kết nối các nhà môi giới nhất định và đăng ký các chủ đề được chỉ định bởi ứng dụng của bạn. Các cổ phiếu MqttAndroidService không biết các nhà môi giới và các chủ đề ở tất cả sau khi nó được bắt đầu bởi hệ điều hành Android.

Vì vậy, cách tiếp cận chính xác là có dịch vụ phụ trợ cho ứng dụng của bạn, thông tin chi tiết về nhà môi giới và chủ đề. Và dịch vụ của bạn chịu trách nhiệm về việc kết nối lại Mqtt broker và các chủ đề đăng ký vào đúng thời điểm.

+1

Bạn có thể đúng nhưng thật lạ khi paho chính thức [site] (https://eclipse.org/paho/clients/android/) tuyên bố "cung cấp một dịch vụ chạy dài để xử lý gửi và nhận tin nhắn thay mặt cho ứng dụng khách của Android khi các ứng dụng chính Hoạt động có thể không chạy " – user2814778

6

Theo như tôi hiểu chủ đề Paho mang đến tất cả những gì bạn cần. Trong ứng dụng của tôi, dịch vụ paho mqtt không bao giờ dừng lại cho đến khi tôi muốn nó. Tôi đã đăng ký dịch vụ Paho trong tệp kê khai cho Android bằng đoạn mã sau.

‹!-- Mqtt Service --› 
‹service android:name="com.ibm.android.service.MqttService" /› 

Điều này cần thực hiện thủ thuật.

biết thêm thông tin trong mô tả của http://www.eclipse.org/paho/files/android-javadoc/index.html

+2

Nếu bạn downvote câu trả lời, hãy cho biết lý do. Đặc biệt là khi bạn downvote tất cả các câu trả lời của tôi. Tôi ở đây để tìm hiểu, vì vậy khi có điều gì đó tôi có thể làm tốt hơn, hãy cho tôi biết! – kdoteu

+0

Cảm ơn. Tôi có thời gian rảnh rỗi một lần nữa, vì vậy tôi sẽ tiếp tục dự án này sớm. :) – wyzard

+0

Bạn bắt đầu dịch vụ từ đâu? Nếu dịch vụ được bắt đầu từ một hoạt động thì dịch vụ sẽ bị phá hủy với hoạt động. Bạn có thể, tuy nhiên, kết nối lại nhưng giống như các bài viết khác đã nói điều này không đảm bảo kết nối hoặc gọi lại. – Clocker

1

Library Android PAHO của hoạt động tốt. Nó chỉ khó khăn để duy trì trạng thái kết nối, một khi ứng dụng chạy ở chế độ nền. Để cung cấp bất kỳ chức năng nào khác như lưu trữ các tùy chọn kết nối, chủ đề cho pub/sub trong trạng thái nền sẽ cần một số chức năng viết lại ở cấp thư viện.

quan sát của tôi: -

  1. Khi kết nối được thiết lập, MqttService giữ kết nối sống ngay cả khi ứng dụng đi nền. Trừ khi người quản lý dịch vụ của hệ thống giết chết ứng dụng & các dịch vụ của nó. Tất cả điều này là có thể trừ khi mạng không bị gián đoạn.

  2. Dịch vụ này có Trình quản lý báo thức riêng để giữ bản thân còn sống.

Tôi đã làm một thử nghiệm và tôi đã thực hiện một giải pháp nhỏ có thể giúp giữ cho đối tượng kết nối có thể truy cập được trong các hoạt động của ứng dụng. Trừ khi bạn bị ngắt kết nối.

PS: - Giải pháp rất đơn giản. Nhưng nó chỉ hoạt động như một sự quyến rũ.

https://github.com/ameykshirsagar/mqttconnectionpersistence

Tôi chưa thực hiện một thi mà giữ MqttService sống ngay cả sau khi hoạt động của ứng dụng bị phá hủy

0

Nếu bằng 'gần' bạn có nghĩa là 'stop lực' ứng dụng, sau đó có hoàn toàn dừng ứng dụng và bạn sẽ không nhận được tin nhắn (nhưng đó có thể là những gì người dùng muốn anyways).

Nếu tuy nhiên, bằng cách 'đóng' bạn có nghĩa là người dùng/android giết ứng dụng, thì bạn không nhận được thông báo vì bạn không được 'kết nối' người môi giới nữa.

Một giải pháp là tạo một tùy chỉnh Service để quản lý các kết nối.

Thanh toán câu trả lời của tôi here để biết giải pháp chi tiết về những gì phù hợp với tôi.

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