2012-01-04 40 views
31

Tôi đang cố gắng để làm cho Service chạy ở nền trước của mình. Tôi đã cố gắng sử dụng this example (vui lòng tìm phần "Chạy Dịch vụ trong Foreground"), nhưng startForeground() không thực sự hiển thị thông báo của tôi. Và không có ngoại lệ nào được ném ra. Để làm cho nó hiển thị, tôi cần phải sử dụng NotificationManager như here giải thích. Với NotificationManager thông báo của tôi hoạt động, nhưng tôi không chắc chắn rằng Service của tôi là tiền cảnh sau cuộc gọi "im lặng" này tới startForeground().startForeground() không hiển thị Thông báo của tôi

Điều gì có thể sai?

EDIT: Tôi vừa thử nghiệm this sample project phải chứng minh startForeground(), nhưng nó không hoạt động! Tôi sử dụng API v7.0, tôi đã thử nghiệm cả trên trình giả lập và thiết bị thực (SE Xperia Neo). Thông báo không xuất hiện.

EDIT2: nếu tôi cố gắng gọi setForeground() thì tôi nhận được cảnh báo setForeground: ignoring old API call.

Tôi cũng đã cố gắng sử dụng startForegroundCompat() như được mô tả here, nhưng hiệu quả là tuyệt đối giống nhau. Tôi kiểm tra xem dịch vụ của tôi có tiền cảnh sử dụng ActivityManager.RunningServiceInfo như được mô tả here không và tôi thấy dịch vụ của tôi là không phải là tiền cảnh.

+0

Vì bạn đã chọn không cung cấp mã nguồn, sẽ rất khó để giúp bạn trực tiếp. [Đây là một dự án mẫu] (https://github.com/commonsguy/cw-android/tree/master/Notifications/FakePlayer) sử dụng 'startForeground()' thành công. – CommonsWare

+0

Tôi không cung cấp mã nguồn vì mã của tôi giống hệt như ví dụ tôi đã cung cấp: http://goo.gl/xXIvc. Cảm ơn dự án mẫu. –

+0

Tôi đã thử nghiệm dự án mẫu này, nó không hoạt động! Tôi sử dụng API v7.0, tôi đã thử nghiệm cả trên trình giả lập và thiết bị thực (SE Xperia Neo). Thông báo không xuất hiện. –

Trả lời

101

Tôi chỉ nhận thấy rằng startForeground() không hiển thị biểu tượng thông báo nếu tham số id được thiết lập để 0 ...

startForeground(0, notification); // Doesn't work... 

startForeground(1, notification); // Works!!! 

Tôi hy vọng rằng nó có thể giúp đỡ người khác bị mắc kẹt trên này.

+2

Wow đó là một bất ngờ hoàn toàn. Sửa lỗi cho tôi. Cảm ơn! – Yuvi

+7

và chưa có tài liệu nào mơ hồ về giá trị id này ... Tôi hoàn toàn thất vọng với tài liệu nghèo (IMO) -_- –

+0

Tuyệt vời, đã giải quyết được vấn đề! – Dan

0

DMitry. Tôi vừa mới chịu đựng vấn đề của bạn và tìm ra nguyên nhân.

Nếu ứng dụng của bạn đang thay đổi trạng thái COMPONENT PackageManager.setComponentEnabledSetting()) Android sẽ xóa dịch vụ khỏi biểu tượng thông báo trước và biểu tượng thông báo.

Bug reported at Nov, 2011

+1

Cảm ơn bạn đã trả lời nhưng ứng dụng của tôi không thay đổi trạng thái của COMPONENT, vì vậy đây có thể là một số lý do khác. –

16

ngoài câu trả lời hay nhất. bạn cũng nên kiểm tra xem bạn đã gọi số setSmallIcon chưa. Trên điện thoại Android của tôi, tôi không thể có được những gì tôi mong đợi mà không gọi setSmallIcon

+0

Điều này đã làm việc trong trường hợp của tôi – kospol

+0

Đã làm việc cho tôi cũng vậy – Nikaoto

0

Đây có thể là một chủ đề cũ, nhưng tôi muốn thêm những gì tôi vừa mới học mà không được đề cập được nêu ra:

Có thể rằng Service vẫn còn hoạt động sau khi stopSelf() được gọi vì có Activity đã gắn với Service. Trên thực tế, startForeground() sẽ không hiển thị thông báo cũng như không đưa ra bất kỳ ngoại lệ nào trong trường hợp này.

0

Dịch vụ của bạn là dịch vụ bắt đầu hoặc dịch vụ bị ràng buộc? Tôi đã có cùng một vấn đề với một dịch vụ bị ràng buộc, nhưng bắt đầu dịch vụ trước khi ràng buộc nó cho phép tôi gọi startForeground(int, notification) với và có thông báo hiển thị.

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