무배터리 기기 지원

이 페이지에서는 Android에서 분리형 배터리가 있거나 내장 배터리가 없는 제품을 어떻게 취급하는지를 설명합니다. 내장 배터리가 없는 기기는 대신 AC 전원 콘센트나 다른 기기의 USB 포트와 같은 외부 전원에 연결됩니다.

배터리가 있나요?

다음 코드는 애플리케이션에서 기기의 배터리 유무를 감지하는 데 사용됩니다.

```
final Intent batteryInfo = registerReceiver(null, new
IntentFilter(Intent.ACTION_BATTERY_CHANGED));

return batteryInfo.getBooleanExtra(BatteryManager.EXTRA_PRESENT, true);
```

무배터리 기기 동작

Android가 제품의 배터리 기기를 감지하지 못하는 경우에는 다음과 같은 배터리 관련 기본값이 사용됩니다. Android 9 버전에서는 기본값이 변경되었습니다. 아래 표에 차이점이 나와 있습니다.

배터리 상태 Android 9 이상 Android 8.1 이하
있음 거짓
상태 알 수 없음 충전 중
잔여 용량 0 100%
상태 알 수 없음
AC 충전기 온라인 상태 변경되지 않음 true로 강제됨

제조업체는 커널 power_supply 드라이버 또는 Health HAL을 사용하여 기본 설정을 변경할 수 있습니다.

Android 9 이상

Android 9에서는 기본적으로 배터리가 있다고 가장했거나 100%에서 충전되고 있었거나 서미스터 온도가 정상으로 판독되는 정상 상태였던 무배터리와 관련된 이전 코드 중 일부가 제거되었습니다.

이러한 정보를 취급하는 대부분의 프레임워크 API는 계속해서 일반적인 상황을 이전과 같은 방식으로 처리합니다. 즉, 시스템이 충전 중(배터리 전력으로 구동되지 않음)으로 간주되며 배터리 낮음으로 간주되지 않습니다. 사용자 인터페이스에서 배터리 아이콘을 생성하면, 이 아이콘이 느낌표와 함께 표시되고 배터리 비율이 0%로 표시됩니다. 하지만 배터리 낮음으로 인해 기기가 종료되지는 않으며, 충전 또는 양호한 배터리가 필요한 작업이 예약됩니다.

Android 8.1 이하

배터리 상태를 알 수 없으므로 Android 프레임워크 API는 시스템을 충전 중(또는 배터리 전력으로 구동되지 않음)으로 간주하며, 배터리 낮음으로 간주하지 않습니다. 사용자 인터페이스에서 배터리 아이콘을 생성하면, 이 아이콘이 느낌표와 함께 표시되고 배터리 비율이 0%로 표시됩니다. 하지만 배터리 낮음으로 인해 기기가 종료되지는 않으며, 충전 또는 양호한 배터리가 필요한 작업이 예약됩니다.

구현

Android 9의 기본 코드는 기기에서 제대로 작동할 수 있지만 위의 설명처럼 제품의 전력 및 배터리 상태를 정확하게 반영할 수 있도록 커널 또는 HAL을 변경하는 것이 좋습니다. Android 9 이상에서 Linux 전원 공급 장치 클래스 충전기 기기를 감지하지 않으면 기본적으로 모든 충전기 유형(AC, USB, 무선)이 오프라인 상태가 됩니다. 모든 충전기가 오프라인 상태이지만 감지된 배터리 기기는 없는 경우 시스템은 이전에 설명한 것처럼 배터리 전력이 아닌 외부에서 구동된다는 측면에서 계속해서 충전되고 있는 것으로 간주될 수 있습니다.

제품에 배터리가 없고 항상 전원에 연결되어 있는 경우 온라인 sysfs 속성을 true로 설정하는 AC나 USB 전원용 Linux 커널 power_supply 클래스 충전기 드라이버를 구현하는 것이 가장 좋습니다. 아니면 기기의 Health HAL에서 AC 충전기 온라인 속성을 구성할 수도 있습니다. 이렇게 하려면 Health 2.0 구현의 설명처럼 Health HAL을 구현합니다.

이 맞춤 Health HAL은 BatteryProperties.chargerAcOnline = true 값을 수정하는 Health::getHealthInfo()의 맞춤 버전을 구현합니다.

시작하려면 hardware/interfaces/health/2.0/default/Health.cpp 파일을 자체 Health HAL 구현에 복사하고 Health 2.0 README에 따라 수정하세요.