Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

무배터리 기기 지원

이 페이지에서는 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 드라이버 또는 상태 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 클래스 충전기 드라이버를 구현하는 것이 좋습니다. 아니면 기기의 상태 HAL에서 AC 충전기 온라인 속성을 구성할 수도 있습니다. 이렇게 하려면 상태 2.0의 설명처럼 상태 HAL을 구현해야 합니다.

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

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