android - 获取电池温度 [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>
解决方案
你几乎做对了。从您的代码中读取,我看到您没有在活动中注册广播接收器。
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
))
}
}
它应该工作。在您注册广播之前,它不会被调用。广播接收器使用观察者模式,这意味着您需要注册自己才能观察事件。请在下方评论,如果它仍然不起作用。
推荐阅读
- javascript - 我的 Javascript 中使用单选按钮运行的堆叠进度条出现问题
- laravel - 我部署到 aws 的 Laravel 应用程序无法正常工作
- r - 没有反映外部反应环境的变化?
- laravel - 如何防止多次保存相同的记录
- linux - 如果使用 shell 脚本在 catalina.out 文件中发生任何异常,我该如何重新启动 tomcat 服务器?
- python - 基于连续列值拆分数据帧,数据帧中不存在
- eclipse - 添加服务器时eclipse抛出swt错误
- c# - 使客户电子邮件字段独一无二
- .net-core - Blazor 服务器中的客户端何时/如何超时连接?
- select - Oracle比较一行中的两个值