2012-02-03 25 views
5

Có hai cách để làm cho bộ thu phát sóng được biết đến với hệ thống: Một cách khai báo nó trong tệp kê khai với phần tử này. Cách khác là tạo bộ thu động trong mã java.Máy phát quảng bá pin được khai báo trong tệp kê khai không hoạt động?

Bây giờ, người nhận đã được tạo động trong mã java và nó hoạt động bình thường. Nhưng tại sao cách đầu tiên "Khai báo trong tệp kê khai" không thành công?

Có ai thành công không?

Cảm ơn.

AndroidManifest.xml

<receiver android:name="pj.batteryinfo.BatteryReceiver"> 
    <intent-filter> 
     <action android:name="android.intent.action.BATTERY_CHANGED"></action> 
    </intent-filter> 
</receiver> 

Trả lời

4

Đối với một số hành động, bạn chỉ có thể khai báo BroadcastReceiver trong mã Java. Điều này xảy ra với hành động BATTERY_CHANGEDSCREEN_ON, SCREEN_OFF cho đến giờ tôi biết.

Khi bạn khai báo BroadcastReceiver trong tệp Manifest.xml, cho dù ứng dụng của bạn có đang chạy hay không, BroadcastReceiver sẽ được đánh thức và do đó phương thức onReceive sẽ được gọi. Tôi nghĩ rằng điều này là do hành động BATTERY_CHANGED là rất phổ biến để diễn ra và nếu bạn có thể tuyên bố nó trong Manifest, hệ thống thường sẽ gửi rất nhiều chương trình phát sóng và do đó tiêu thụ pin đáng kể, tuy nhiên, khi bạn tuyên bố nó trong mã, BroadcastReceiver sẽ chỉ có hiệu lực khi hoạt động đang chạy và do đó tránh tiêu thụ pin cực. Để tiết kiệm pin, Android không cho phép đăng ký các tác vụ như vậy trong tệp.

Đây chỉ là phỏng đoán của tôi. Tôi không thấy bất kỳ giải thích chính thức nào về điều này. Là một nhà phát triển, tôi chỉ nhớ những hành động như vậy, chứ không phải là lý do đằng sau chúng.

+1

Ồ .. Tôi muốn biết 'TẠI SAO'. Cảm ơn bạn đã trả lời! – Sodino

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