Dozeの最適化

こんにちはフリーランスの永田です。

AndroidのDozeの最適化を紹介致します。最近のAndroidはバッテリーの電池をAIが自動で制御しているようです。

省エネ効果のデメリット部分は、アプリがスリープ状態の時に、機能もスリープ状態の点です。これをDozeと言います。

最近のVersionが新しくなったせいか、なかなか正しく動く挙動がなかったので、ご紹介致します。

確認項目

電池の最適化を押下

最適化されていないアプリの一覧を確認

アプリ初起動時にポップアップが表示される

アプリがスリープ状態でも通知などの機能を活用できる

一番下のSampleDpzeModeが最適化されていないアプリです。

アプリ初起動時にポップアップが表示される。

アプリがスリープ状態でも通知などの機能を活用できる

https://twitter.com/dbank0208/status/1211588860498415616?s=20

やり方

簡単なので、詳細の解説は割愛いたします。使用する人は自分で読んでみてください。

class MainActivity : AppCompatActivity() {

    var pm: PowerManager? = null
    var MY_IGNORE_OPTIMIZATION_REQUEST = 1

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        pm = getSystemService(Context.POWER_SERVICE) as PowerManager
    }

    override fun onResume() {
        super.onResume()
        val isIgnoringBatteryOptimizations: Boolean =
            pm!!.isIgnoringBatteryOptimizations(packageName)
        if (!isIgnoringBatteryOptimizations) {
            val intent = Intent()
            intent.action = Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
            intent.data = Uri.parse("package:$packageName")
            startActivityForResult(intent, MY_IGNORE_OPTIMIZATION_REQUEST)
        }
    }

    @SuppressLint("MissingSuperCall")
    override fun onActivityResult(
        requestCode: Int,
        resultCode: Int,
        data: Intent?
    ) {

        val isIgnoringBatteryOptimizations =  pm!!.isIgnoringBatteryOptimizations(packageName)
        if (isIgnoringBatteryOptimizations) { // Ignoring battery optimization
        } else { // Not ignoring battery optimization
        }
    }
}

AndroidManifest.xml

<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

バックグラウンドで動く機能は、Android特有のストロングポイントだと思います。

以上、貴重なお時間、お読み下さいまして、誠にありがとうございます。