🐙

Javaのコードでバッテリー残量を調べる

2024/04/10に公開

Tips💡

JavaのコードでAndroidのバッテリー残量を調べて、Kotlinで呼ぶのを試してみました。まさか本当にできるとは....

バッテリー残量を調べるコード

BatteryChecker.javaを作成して、以下のコードを書く。

package com.example.fromjavarun.functionjava;

import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;

// バッテリーの残量を取得するクラス
public class BatteryChecker {
    // バッテリーの残量を取得するメソッド
    public int getBatteryPercentage(Context context) {
        // バッテリーの残量を取得
        IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
        Intent batteryStatus = context.registerReceiver(null, filter);
        // バッテリーの残量を計算
        assert batteryStatus != null;
        int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
        int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
        // バッテリーの残量をパーセントで返す
        float batteryPct = level / (float)scale;
        // パーセントに変換
        return (int) (batteryPct * 100);
    }
}

KotlinからJavaのコードを呼ぶ!

Kotlinから、Javaのコードを呼び出して、View側にバッテリー残量を表示するコード。どうやら、newをしなくてもJavaクラスをインスタンス化できるよだな。

package com.example.fromjavarun

import android.content.Context
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import com.example.fromjavarun.functionjava.BatteryChecker
import com.example.fromjavarun.ui.theme.FromJavaRunTheme

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            FromJavaRunTheme {
                // A surface container using the 'background' color from the theme
                Surface(
                    modifier = Modifier.fillMaxSize(),
                    color = MaterialTheme.colorScheme.background
                ) {
                    // BatteryStatusコンポーネントを呼び出し
                    BatteryStatus(context = this)
                }
            }
        }
    }
}

// BatteryStatusコンポーネント
@Composable
fun BatteryStatus(context: Context, modifier: Modifier = Modifier) {
    // JavaのBatteryCheckerクラスをインスタンス化
    val batteryChecker = BatteryChecker()

    // getBatteryPercentageメソッドを呼び出し
    val batteryPercentage = batteryChecker.getBatteryPercentage(context)

    Column(modifier = modifier) {
        Text(text = "Battery percentage: $batteryPercentage%")
    }
}

実行結果:

最後に

Javaのコードでロジックを書いて、呼び出すコードを前回の記事で書いたのですが、今回はバッテリーの残量を調べるコードを書いてみました。なんで、Javaのコードを書いたのかというと、最近仕事でAndriod Javaのコードを読むことがあったのと、Kotlinから、Javaのコードを呼ぶことができるのを知って、試してやってみるかと、気になった機能を実装して、試しています。

Discussion