1
0

More than 3 years have passed since last update.

Android StudioでAndroid端末の電流、電圧、ワット数を計測する

Last updated at Posted at 2021-08-13

Androidのアプリによって消費電力が変わるのか確認したくて実装しようと考えたので、Android Studioで実装してみました。

動作環境

  • Android studio 4.1.2
  • Windows 10 Pro 20H2

実装

MainActivity

class MainActivity : AppCompatActivity() {
    private val sbuilder = StringBuilder()
    private var batteryStatus: Intent? = null
    private var bManager: BatteryManager? = null
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val ifilter = IntentFilter(Intent.ACTION_BATTERY_CHANGED)
        batteryStatus = this.registerReceiver(null, ifilter)



        // 以降は Lollipop と機種によるサポートの違いあり
        if (Build.VERSION.SDK_INT >= 21) {
            bManager = this.getSystemService(BATTERY_SERVICE) as BatteryManager
            if (bManager != null) {
                // BatteryCapacityMicroAh
                val battery = bManager!!.getIntProperty(
                        BatteryManager.BATTERY_PROPERTY_CURRENT_NOW )
                sbuilder.append("battery: ")
                sbuilder.append((battery / 1000).toString())
                sbuilder.append(" mA\n")

                // Voltage
                val bv = batteryStatus!!.getIntExtra(
                        BatteryManager.EXTRA_VOLTAGE, -1)
                sbuilder.append("Voltage: ")
                sbuilder.append((bv.toFloat() / 1000).toString())
                sbuilder.append(" [v]\n\n")
                var A = battery.toFloat() / 1000000
                var V = bv.toFloat() / 1000
                var W = A * V
                sbuilder.append("WAT: ")
                sbuilder.append(W.toString())
                sbuilder.append(" [W]\n\n")

            }
        }
        val textView = findViewById<TextView>(R.id.text_view)
        textView.text = sbuilder
    }
}
MainActivity
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/text_view"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

解説

Androidのバッテリー情報を持ってくる

  • IntentFilterはアプリの根幹の情報を取ってくるモジュールで引数のIntent.ACTION_BATTERY_CHANGEDはバッテリー情報を持ってくるように指定する
MainActivity
 val ifilter = IntentFilter(Intent.ACTION_BATTERY_CHANGED)

レシーバーを登録する

  • MainActivityが破棄されない限り、ブロードキャストを受信する
    • ブロードキャストは、対象となるイベントが発生したときに送信されます。たとえば、システムの起動、デバイスの充電の開始など、さまざまなシステム イベントが発生したときに、Android システムがブロードキャストを送信します。
MainActivity
batteryStatus = this.registerReceiver(null, ifilter)

計測する

  • this.getSystemServiceはAndroid端末のバージョンによってサービスが変わってくるため、SDKのバージョンが21以上であるか判定する(SDKバージョン21=Android5)
  • this.getSystemServiceはバッテリー状態を管理するハンドラ
MainActivity
 if (Build.VERSION.SDK_INT >= 21) {
            bManager = this. this.getSystemService(BATTERY_SERVICE) as BatteryManager
・・・
}
  • 消費電力をマイクロアンペアの単位で取得する。バッテリーの値は、充電される電力と消費電力の差を表示している
    • 充電時は、充電電力 ー 消費電力と計算され、充電電力の方が大きいためプラスで表示される
    • バッテリー駆動時、消費電力だけ表示されるため、マイナスで表示される
MainActivity
val battery = bManager!!.getIntProperty(
                        BatteryManager.BATTERY_PROPERTY_CURRENT_NOW )
  • BatteryManager.EXTRA_VOLTAGEで電圧を取得する
MainActivity.kt
val bv = batteryStatus!!.getIntExtra(
                        BatteryManager.EXTRA_VOLTAGE, -1)
  • ワット数を計算する   * ワット数は電流✖️電圧で計算できる ~~~kt:MainActivity.kt var A = battery.toFloat() / 1000000 var V = bv.toFloat() / 1000 var W = A * V ~~~

完成

参考

https://hegtel.com/denatsu-denryu.html
https://source.android.google.cn/devices/tech/power/device?hl=ja
https://akira-watson.com/android/batterymanager.html

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0