こんにちはフリーランスの永田です。
AndroidのDozeの最適化を紹介致します。最近のAndroidはバッテリーの電池をAIが自動で制御しているようです。
省エネ効果のデメリット部分は、アプリがスリープ状態の時に、機能もスリープ状態の点です。これをDozeと言います。
最近のVersionが新しくなったせいか、なかなか正しく動く挙動がなかったので、ご紹介致します。
確認項目
電池の最適化を押下
最適化されていないアプリの一覧を確認
アプリ初起動時にポップアップが表示される
アプリがスリープ状態でも通知などの機能を活用できる

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

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

アプリがスリープ状態でも通知などの機能を活用できる
やり方
簡単なので、詳細の解説は割愛いたします。使用する人は自分で読んでみてください。
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特有のストロングポイントだと思います。
以上、貴重なお時間、お読み下さいまして、誠にありがとうございます。