最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實(shí)現(xiàn)獲取手機(jī)的電池電量和充電狀態(tài)

 更新時(shí)間:2025年12月13日 09:38:19   作者:柯南二號  
這篇文章主要為大家詳細(xì)介紹了如何使用Android實(shí)現(xiàn)獲取手機(jī)的電池電量和充電狀態(tài)等信息,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解下

一、可獲取的信息

通過 Android 的電池廣播,你可以拿到:

信息說明
當(dāng)前電量 level當(dāng)前電量百分比
電量最大值 scale一般 100
是否在充電AC / USB / 無線充電
充電開始 / 充電結(jié)束通過廣播監(jiān)聽
電池健康狀態(tài)good、overheat 等
電池溫度部分機(jī)型支持

二、獲取當(dāng)前電量(無需注冊廣播)

Android 推薦方式:

val batteryManager = context.getSystemService(Context.BATTERY_SERVICE) as BatteryManager
val batteryLevel = batteryManager.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)

batteryLevel 即為 0–100 的電量百分比

兼容 Android 5–16。

三、監(jiān)聽開始充電 / 結(jié)束充電(廣播方式)

Android 使用以下廣播:

  • ACTION_BATTERY_CHANGED(粘性廣播,不需要手動(dòng)注冊)
  • ACTION_POWER_CONNECTED—— 插上電源(開始充電)
  • ACTION_POWER_DISCONNECTED—— 拔掉電源(停止充電)

四、實(shí)際可用代碼(Kotlin)

1. 監(jiān)聽充電狀態(tài)的 BroadcastReceiver

class BatteryReceiver(private val callback: (BatteryEvent) -> Unit) : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {

        when (intent.action) {

            Intent.ACTION_POWER_CONNECTED -> {
                callback(BatteryEvent.ChargeStart)
            }

            Intent.ACTION_POWER_DISCONNECTED -> {
                callback(BatteryEvent.ChargeStop)
            }

            Intent.ACTION_BATTERY_CHANGED -> {
                val level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
                val scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100)
                val status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1)

                val isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                                 status == BatteryManager.BATTERY_STATUS_FULL

                val percent = level * 100 / scale

                callback(BatteryEvent.BatteryInfo(percent, isCharging))
            }
        }
    }
}

sealed class BatteryEvent {
    data object ChargeStart : BatteryEvent()
    data object ChargeStop : BatteryEvent()
    data class BatteryInfo(val level: Int, val isCharging: Boolean) : BatteryEvent()
}

2. 在 Activity / Service 中注冊

val receiver = BatteryReceiver { event ->
    when (event) {
        is BatteryEvent.ChargeStart -> Log.d("Battery", "開始充電")
        is BatteryEvent.ChargeStop -> Log.d("Battery", "停止充電")
        is BatteryEvent.BatteryInfo -> Log.d("Battery", "電量=${event.level}%, 是否充電=${event.isCharging}")
    }
}

val filter = IntentFilter().apply {
    addAction(Intent.ACTION_BATTERY_CHANGED)
    addAction(Intent.ACTION_POWER_CONNECTED)
    addAction(Intent.ACTION_POWER_DISCONNECTED)
}

registerReceiver(receiver, filter)

五、Java 寫法

public class BatteryReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {

        String action = intent.getAction();

        if (Intent.ACTION_POWER_CONNECTED.equals(action)) {
            Log.d("Battery", "開始充電");
        } else if (Intent.ACTION_POWER_DISCONNECTED.equals(action)) {
            Log.d("Battery", "停止充電");
        } else if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {

            int level = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
            int scale = intent.getIntExtra(BatteryManager.EXTRA_SCALE, 100);
            int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);

            boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
                                 status == BatteryManager.BATTERY_STATUS_FULL;

            int percent = level * 100 / scale;

            Log.d("Battery", "電量=" + percent + "% 是否充電=" + isCharging);
        }
    }
}

注冊:

IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_BATTERY_CHANGED);
filter.addAction(Intent.ACTION_POWER_CONNECTED);
filter.addAction(Intent.ACTION_POWER_DISCONNECTED);

registerReceiver(new BatteryReceiver(), filter);

六、注意事項(xiàng)

1.無需權(quán)限

獲取電量/充電狀態(tài) 不需要任何危險(xiǎn)權(quán)限

2.ACTION_BATTERY_CHANGED 是粘性廣播

不需要手動(dòng)發(fā)送,一調(diào)用 registerReceiver() 就能拿到當(dāng)前電量。

3.Android 10–16 完全兼容

這些電池廣播沒有廢棄,可直接用。

七、如果你需要“首次進(jìn)入頁面就知道狀態(tài)”

可以用:

val intent = Context.registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))

即可直接拿:

val level = intent?.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
val status = intent?.getIntExtra(BatteryManager.EXTRA_STATUS, -1)

到此這篇關(guān)于Android實(shí)現(xiàn)獲取手機(jī)的電池電量和充電狀態(tài)的文章就介紹到這了,更多相關(guān)Android獲取手機(jī)信息內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

长顺县| 高雄市| 铅山县| 阳新县| 洛宁县| 镇原县| 即墨市| 化隆| 鹤庆县| 鱼台县| 远安县| 察哈| 兴义市| 西城区| 大丰市| 饶阳县| 密山市| 威宁| 莱西市| 周口市| 正宁县| 昌江| 广丰县| 资溪县| 东乌珠穆沁旗| 西乌珠穆沁旗| 凉山| 乌拉特后旗| 汕头市| 郁南县| 临海市| 松溪县| 云安县| 龙游县| 页游| 邮箱| 独山县| 万安县| 屏南县| 靖州| 清远市|