【问题标题】:Display notification if the battery becomes less than 10% in Android by Kotlin在 Kotlin 的 Android 中电池电量低于 10% 时显示通知
【发布时间】:2021-03-23 19:53:13
【问题描述】:

如果 Kotlin 使用广播接收器在 Android Studio 中电池电量低于 10%,我如何显示通知?

【问题讨论】:

标签: android kotlin notifications battery


【解决方案1】:

用这个在

中创建一个新的Android项目

将 AndroidX 支持库添加到您的模块 build.gradle(其他implementation 是:

dependencies {
    implementation 'androidx.core:core-ktx:1.3.2'
}

MainActivity.kt 导入:

import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.os.BatteryManager
import android.os.Build
import android.os.Bundle
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.NotificationCompat
import kotlin.concurrent.thread

MainActivity.kt:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        thread {
            val mNotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

            val mChannel = NotificationChannel("default", "default", NotificationManager.IMPORTANCE_DEFAULT)
            mNotificationManager.createNotificationChannel(mChannel)

            while (true) {
                val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter ->
                    this.registerReceiver(null, ifilter)
                }
                val batteryPct: Float = batteryStatus?.let { intent ->
                    val level: Int = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
                    val scale: Int = intent.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
                    level * 100 / scale.toFloat()
                } ?: 100f

                if (batteryPct <= 10) {
                    val notif = NotificationCompat.Builder(this, "default").setContentText("Low Battery: ${batteryPct.toInt()}%").setSmallIcon(R.drawable.ic_launcher_foreground).build()
                    mNotificationManager.notify(1, notif)  // re-use notification in tray
                }

                Thread.sleep(20000)  // check every 20 seconds
            }
        }
    }
}

【讨论】:

    【解决方案2】:

    在清单中添加权限。注册您的广播接收器。在本教程中阅读更多内容 https://developer.android.com/training/monitoring-device-state/battery-monitoring

    【讨论】:

    • 嗨,Slutsenko,您能说一下应该添加哪些权限吗?另外,“注册您的广播接收器”是什么意思?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 2019-05-28
    相关资源
    最近更新 更多