2011-10-21 7 views
0

서비스를 사용하여 배터리 변경을 수신하는 배터리 위젯을 만들었습니다. 그러나이 때문에 위젯은 데이터를 표시하기 전에 배터리 상태가 변경되기 전에 대기해야합니다.Android 배터리 위젯이 초기화되었습니다.

제 질문은 배터리를 일회용으로 조사하는 간단한 방법이 있는지 여부입니다.

잘못된 트리를 짖고있을 수 있지만 배터리의 초기 상태를 얻으려면 AppWidgetProvider 클래스의 BroadcastReceiver 사용하여 시도했지만 그 서비스를 중지하는 방법을 알아낼 수 없습니다 .

의견이 있으십니까?

건배

내가 배터리 변경을 수신하도록 서비스를 사용하는 배터리 위젯을 만든

답변

2

.

항상 서비스를 유지하는 것은 일반적으로 좋은 생각이 아닙니다. 사용자는이를 좋아하지 않으며 작업 킬러 또는 설정의 서비스 관리 화면을 사용하여 사용자를 죽일 것입니다. 안드로이드는 그것을 좋아하지 않으며 결국 그것을 멈출 것이다.

배터리 수준이 자주 변경되지 않으므로 AlarmManager을 사용하는 모델로 전환하고 몇 분마다 배터리 수준을 확인하십시오.

그러나 위젯을 만들면 데이터를 표시하기 전에 배터리 상태가 변경되기 전에 기다려야합니다. 당신이 ACTION_BATTERY_CHANGED 때문에, 당신의 BroadcastReceiver 즉시 해당 작업에 대한 마지막 전송 방송으로 호출, ACTION_BATTERY_CHANGED에 등록

번호 끈적 방송입니다.

this sample project에서 확인할 수 있습니다. 배터리 정보는 즉시 액티비티에 표시됩니다. 이는 onReceive() 메서드가 즉시 호출되기 때문에 가능합니다.

제 질문은 배터리를 일회용으로 간단한 방법으로 문의하는지 여부입니다.

그 역시 가능합니다. ACTION_BATTERY_CHANGED의 경우 으로 전화 하시되 nullBroadcastReceiver으로 전화하십시오. 해당 작업에 대해 마지막으로 보낸 브로드 캐스트 Intent이 반환됩니다. 이것은 예를 들어 AlarmManager 이벤트에서 처리하는 방법입니다.

+0

예 처음 만들 때 영구 서비스를 사용하는 것에 대해 과묵했지만, 가장 성공적인 배터리 위젯 중 다수가 영구 서비스를 사용하고 있음을 알았을 때 두려움이 완화되었습니다. 어떤 상황에서 시스템이 그것을 종료합니까? 자원이 제한 될 때 나는 상상한다. 나는 약 1 주일 동안 위젯을 실행 해 왔으며 배터리와의 동기화를 잃지 않았다. 감사합니다. AlarmManager를 사용해 보겠습니다. – FullySearchable

관련 문제