2010-09-11 4 views
9

Tôi đã viết một widget cho Android và tôi đang cố gắng để có được mức pin. Tôi đã cố gắng sử dụngnhận mức pin ở widget android

Intent batteryIntent = context.registerReceiver(null, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 

nhưng tôi nhận được lỗi: "thành phần IntentReceiver không được phép đăng ký để nhận được ý đồ"

Tại sao? ACTION_BATTERY_CHANGED là một mục đích dính và tôi không đăng ký một máy thu (null trong tham số đầu tiên).

Bất kỳ giải pháp nào khác?

Cảm ơn.

+0

lỗi android? http://code.google.com/p/android/issues/detail?id=5111 – Ran

Trả lời

8

hackbod đã đưa ra giải pháp tại các ý kiến:

"sử dụng getApplicationContext() registerReciever()."

3

Ummmm ... cảm giác như một lỗi. Họ phải thực hiện việc kiểm tra là a-a- BroadcastRecevier quá sớm. Bạn có thể muốn tạo một dự án thể hiện vấn đề, sau đó đăng bài đó lên b.android.com.

Trong điều khoản của một workaround:

BướC# 1: Tạo IntentService

BướC# 2: Trong onHandleIntent(), làm công việc cập nhật phụ tùng thực tế của bạn, bao gồm nhận mức pin

BướC# 3: Có onUpdate() trong số AppWidgetProvider chỉ cần gọi startService() trên số IntentService của bạn.

+12

Hoặc chỉ sử dụng getApplicationContext(). registerReciever(). – hackbod

+0

@hackbod: Trong trường hợp này, 'getApplicationContext()' sẽ hoạt động khác với 'Context' mà' onReceive() 'được truyền vào? – CommonsWare

+0

@hackbod: nó đã hoạt động! cảm ơn! – Ran