【问题标题】:when battery is low connect device when i connect device automatically dismiss alert dialog box from activities当电池电量不足时连接设备当我连接设备时自动从活动中关闭警报对话框
【发布时间】:2022-01-08 17:13:44
【问题描述】:

这是我在 mainactivity.kt 文件中的广播接收器乐趣

私有 val mPlugInReceiver = 对象:BroadcastReceiver() { 覆盖 fun onReceive(context: Context, intent: Intent) {

        val bm = context.getSystemService(Application.BATTERY_SERVICE) as BatteryManager
        val batLevel:Int = bm.getIntProperty(BatteryManager.BATTERY_PROPERTY_CAPACITY)
        System.out.println("integerBatteryLevel ===="+batLevel)

        if(batLevel < 20){
            System.out.println("this is low battaroy below 20 % ===="+batLevel)
        }else
        {
            System.out.println("this is nice  battaroy more than 20 % ===="+batLevel)
        }
        when (intent.action) {

            Intent.ACTION_POWER_CONNECTED -> {

                Toast.makeText(context, "Power connected", Toast.LENGTH_SHORT).show()
                openDialogForBatteryStatus(false)
            }
            Intent.ACTION_POWER_DISCONNECTED -> {
                if(batLevel > 20){
                    openDialogForBatteryStatus(false)
                }else
                {
                    Toast.makeText(context, "Power disconnected", Toast.LENGTH_SHORT).show()
                    openDialogForBatteryStatus(true)

                }          
            }
        }
    }
}

【问题讨论】:

    标签: dialog alert device connect dismiss


    【解决方案1】:

    打开类 BaseActivity : AppCompatActivity() {

    fun openDialogForBatteryLevel(){
    
        val dialogView = layoutInflater.inflate(R.layout.dialog_battery_low, null)
    
        val dialog = AlertDialog.Builder(this@BaseActivity)
            .setView(dialogView).setCancelable(false)
            .show()
    
        dialogView.txtViewDescription.text = "Your Phone Battery is low"
    
        dialogView.txtViewOk.setOnClickListener{
            this.finishAffinity()
        }
    
        dialog.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        dialogView.txtViewOk.setOnClickListener {
            dialog.dismiss()
        }
    }
    
    fun openDialogForBatteryStatus(){
        val dialogView = layoutInflater.inflate(R.layout.dialog_battery_low, null)
    
        val dialog = AlertDialog.Builder(this@BaseActivity)
                .setView(dialogView).setCancelable(false)
                .show()
    
        dialogView.txtViewDescription.text = "Please Remove charger"
    
        dialogView.txtViewOk.setOnClickListener{
            this.finishAffinity()
    
        }
        dialog.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        dialogView.txtViewOk.setOnClickListener {
            dialog.dismiss()
        }
    
    }
    

    }

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案2】:

    我再次更改了我的 BaseActivity,它在代码中显示了一些红线

    fun openDialogForBatteryLevel(show: Boolean, message : String): AlertDialog{
    
    val dialog
    val dialogView
    
    
    var d
    
    if(alertD == null){
    dialog = AlertDialog.Builder(this@BaseActivity)
    dialogView = layoutInflater.inflate(R.layout.dialog_battery_low, null)
    dialog.setView(dialogView).setCancelable(false)
    d = dialog.create()
    }else{
    d = alertD
    }
    
    if(show){
    if(d.isShowing)
    d.show()
    }else{
    d.dismiss()
    }
    
    dialogView.txtViewDescription.text = message
    
    dialogView.txtViewOk.setOnClickListener{
    this.finishAffinity()
    }
    
    d.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
    
    return d
    }
    

    【讨论】:

    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案3】:

    您所做的是每次调用 openDialogForBatteryLevel() 方法时创建新对话框,并且每次尝试关闭对话框时都会关闭对话框的新对象,而不是附加到窗口的对象。您应该全局持有对象(最好是对象的弱引用)并仅在未初始化时才对其进行初始化并对其进行操作。

    【讨论】:

    • thnks Aashit 你能帮我修改我的错误吗?
    【解决方案4】:

    这是我的 BaseActivity 调用警报对话框

    open class BaseActivity : AppCompatActivity() {
    
        fun openDialogForBatteryLevel(show: Boolean){
            val dialogView = layoutInflater.inflate(R.layout.dialog_battery_low, null)
    
            val dialog = AlertDialog.Builder(this@BaseActivity)
            dialog.setView(dialogView).setCancelable(false)
    
            val d= dialog.create()
    
            if(show){
                if(d.isShowing)
                    d.show()
            }else{
                d.dismiss()
            }
    
            dialogView.txtViewDescription.text = "Your Phone Battery is low"
    
            dialogView.txtViewOk.setOnClickListener{
                this.finishAffinity()
            }
    
            d.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        }
    
        fun openDialogForBatteryStatus(show: Boolean) {
            val dialogView = layoutInflater.inflate(R.layout.dialog_battery_low, null)
    
            val dialog = AlertDialog.Builder(this@BaseActivity)
            dialog.setView(dialogView).setCancelable(false)
            val d= dialog.create()
            if(show){
                if(d.isShowing)
                    d.show()
            }else{
                d.dismiss()
            }
            dialogView.txtViewDescription.text = "Please Remove charger"
    
            dialogView.txtViewOk.setOnClickListener{
                this.finishAffinity()
    
            }
    
            d.window!!.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
        }
    
    
    }
    

    【讨论】:

    • 当我连接充电器时,它开始充电,但我无法关闭我的警报对话框
    • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 2022-01-09
    • 2012-09-30
    • 1970-01-01
    • 2020-06-28
    • 2012-10-01
    • 2016-03-21
    • 2012-01-03
    • 1970-01-01
    • 2018-07-20
    相关资源
    最近更新 更多