首页 > 解决方案 > 获取电池温度 [KOTLIN]

问题描述

我正在做一个小项目,我启动我的应用程序,然后想在吐司中显示电池温度。

我用广播接收器做到这一点。

当我启动应用程序时,一切顺利,但没有吐司我有 ExampleBroadcastReceiver 没有打开的想法?

当我在 onReceive 中输入日志时,我没有看到任何消息。

这是我的代码,我做错了什么?

ExampleBroadcastReceiver.kt

class ExampleBroadcastReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        if(intent.action == "android.intent.action.BATTERY_CHANGED"){
            val temp = intent.getIntExtra(BatteryManager.EXTRA_TEMPERATURE,0) / 10.0
            Toast.makeText(context, "${temp}", Toast.LENGTH_LONG).show()
        }
    }
}

MainActivity.kt

class MainActivity : AppCompatActivity() {

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

    }
}

AndroidManifest.xml

<receiver android:name=".ExampleBroadcastReceiver">
    <intent-filter>
        <action android:name="android.intent.action.BATTERY_CHANGED" />
    </intent-filter>
</receiver>

标签: androidxmlandroid-studiokotlin

解决方案


你几乎做对了。从您的代码中读取,我看到您没有在活动中注册广播接收器。

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

        val exampleBroadcastReceiver = ExampleBroadcastReceiver()
        this.registerReceiver(exampleBroadcastReceiver, IntentFilter(
            Intent.ACTION_BATTERY_CHANGED
        )) 


    }
}

它应该工作。在您注册广播之前,它不会被调用。广播接收器使用观察者模式,这意味着您需要注册自己才能观察事件。请在下方评论,如果它仍然不起作用。


推荐阅读