Tôi đang tạo một ứng dụng chỉ có thành phần là service
tiếp tục chạy ở chế độ nền (về cơ bản là máy chủ proxy) nhưng tôi không thể tìm cách bắt đầu dịch vụ đó. Ứng dụng không thể có bất kỳ giao diện người dùng hoặc tương tác người dùng nào nên tôi không sử dụng Hoạt động.
Broadcast receiver
có thể nghe phát sóng BOOT nhưng làm thế nào để tôi bắt đầu dịch vụ lần đầu tiên khi cài đặt và cách tôi có thể tiếp tục chạy? hoặc có một chương trình phát mà tôi có thể nghe sau khi ứng dụng được cài đặt, ví dụ: có thể là TIME_TICK nhưng điều đó phải được đăng ký từ hoạt động tôi nghĩ.Cách khởi động ứng dụng Android chỉ dành cho Dịch vụ
Trả lời
Thật không may ngay bây giờ không có cách nào đáng tin cậy để nhận sự kiện phát sóng sau khi ứng dụng của bạn đã được cài đặt, Mục đích ACTION_PACKAGE_ADDED không phát tới gói mới được cài đặt.
Bạn sẽ phải có lớp người nhận chương trình phát sóng cũng như dịch vụ của mình để nhận sự kiện ACTION_BOOT_COMPLETED. Tôi cũng khuyên bạn nên thêm ý định ACTION_USER_PRESENT bị máy thu phát phát hiện, điều này yêu cầu Android 1.5 (minSDK = 3), điều này sẽ gọi bộ thu phát của bạn bất cứ khi nào người dùng mở khóa điện thoại của họ. Điều cuối cùng mà bạn có thể làm để cố gắng giữ cho dịch vụ của mình hoạt động mà không cần phải tắt tự động là gọi Service.setForeground() trong dịch vụ của bạn trênCreate để cho Android biết rằng dịch vụ của bạn không nên dừng lại, điều này được thêm chủ yếu cho loại máy nghe nhạc mp3 các dịch vụ phải tiếp tục chạy nhưng có thể được sử dụng bởi bất kỳ dịch vụ nào.
Đảm bảo bạn thêm quyền thích hợp cho các sự kiện boot_complete và user_present trong tệp kê khai của bạn.
Đây là một lớp đơn giản mà bạn có thể sử dụng làm bộ thu phát sóng cho các sự kiện.
package com.snctln.util.WeatherStatus;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
public class WeatherStatusServiceReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
if(intent.getAction() != null)
{
if(intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED) ||
intent.getAction().equals(Intent.ACTION_USER_PRESENT))
{
context.startService(new Intent(context, WeatherStatusService.class));
}
}
}
};
Chúc may mắn.
Lời khuyên tốt. Một điều về Service.setForeground(): nó không còn hoạt động trong Android 2.0+. Tất cả các dịch vụ "tồn tại lâu" bây giờ bắt buộc phải có thông báo liên tục trong vùng thông báo khi chúng đang chạy. Ví dụ ở đây: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ForegroundService.html –
ACTION_USER_PRESENT là một mẹo tuyệt vời. Tôi đã đấu tranh với việc giữ cho dịch vụ của tôi còn sống cho các lứa tuổi, và điều này chỉ giải quyết được nó. – defrex
Vâng, điều này dường như không hoạt động trong Android 4.0.x nữa ... – ubuntudroid
Return START_STICKY
trong Service.onStartCommand
Android sẽ khởi động lại dịch vụ của bạn
START_STICKY chỉ hợp lệ cho Android 2.0+ – cow
nhưng dịch vụ phải chạy ít nhất một lần để có được quyền liên tục? –
Tôi đang nghiên cứu về vấn đề tương tự. Dưới đây là là những gì tôi đã tìm thấy: http://kfb-android.blogspot.de/2009/04/registering-for-timetick-after-reboot.html
Đó đơn giản bản demo nhỏ cho thấy một giải pháp bằng cách chơi một chút ping-pong giữa một BroadcatReceiver
và Service
. Người nhận được đăng ký để bắt đầu tại thời điểm khởi động bằng cách đăng ký trong Manifest để nhận ACTION_BOOT_COMPLETED
. Nó chỉ bắt đầu một dịch vụ khi receviving ACTION_BOOT_COMPLETED
. Lần lượt Service
đăng ký BroadcastReceiver
rồi cho số ACTION_TIME_TICK
.
Logic ứng dụng sẽ được triển khai trong BroadcastReceiver
.
- 1. Khởi chạy dịch vụ từ khởi động ứng dụng, không hoạt động
- 2. Khởi động Dịch vụ khi khởi động nhưng không phải toàn bộ ứng dụng Android
- 3. Cách tạo Ứng dụng Android chỉ dành cho Doanh nghiệp
- 4. Dịch vụ khởi động NFC Android
- 5. Không thể khởi động ứng dụng dành cho máy tính để bàn từ dịch vụ Windows trên Windows 7
- 6. Khởi động lại dịch vụ cho ứng dụng trên thẻ SD Khi thẻ SD được remounted
- 7. Android: Khởi động dịch vụ lúc khởi động, nhưng không khởi chạy GUI
- 8. Tự động khởi động ứng dụng/dịch vụ global.asax/wcf khi IIS7 bắt đầu tự động
- 9. Cách khởi động lại dịch vụ?
- 10. dịch vụ android tự khởi động lại trên ứng dụng bị giết
- 11. Khởi động ứng dụng android mà không cần hoạt động
- 12. Ứng dụng Android Chỉ sau khi khởi động
- 13. Dịch vụ khởi động Android không bao giờ bắt đầu
- 14. Cách chạy tác vụ khi dịch vụ windows khởi động?
- 15. Cách khởi động dịch vụ Android từ một hoạt động và ngừng dịch vụ trong một hoạt động khác?
- 16. Ứng dụng mẫu tốt cho dịch vụ android
- 17. Eclipse dành cho Android: Cách tự động 'Xuất ứng dụng Android' sang apk?
- 18. Dịch vụ Android dừng khi tôi thoát khỏi ứng dụng
- 19. Khung công tác PHP nào phù hợp cho các ứng dụng chỉ dành cho dịch vụ web?
- 20. Eclipse chỉ dành cho Android?
- 21. Ứng dụng Android Cách trì hoãn Dịch vụ của bạn bắt đầu khi khởi động điện thoại
- 22. Khởi động Android Market từ Ứng dụng
- 23. Cách khởi động/khởi chạy ứng dụng tại thời điểm khởi động Android
- 24. Android Khởi động lại ứng dụng
- 25. Hướng dẫn khởi động dành cho ektron
- 26. Tự động khởi động lại Dịch vụ khi gói ứng dụng gặp sự cố
- 27. có nghĩa là chỉ dành cho các dịch vụ web HOẶC cho cả dịch vụ web VÀ các trang web?
- 28. Giao tiếp giữa dịch vụ cửa sổ và ứng dụng dành cho máy tính để bàn
- 29. Rails 3.1: cách chạy trình khởi tạo chỉ dành cho ứng dụng web (máy chủ đường ray/lân/etc)
- 30. Tai nạn ứng dụng iPhone (Chỉ dành cho iOS4)
Tôi chưa thử bản thân mình nhưng có thể bắt đầu dịch vụ từ đối tượng Ứng dụng không? – phreed
Tôi nghĩ rằng nó hoạt động http://android-codes-examples.blogspot.com/2011/11/running-service-in-background-on.html – Android