【问题标题】:Get battery temperature [KOTLIN]获取电池温度 [KOTLIN]
【发布时间】:2021-07-27 21:20:03
【问题描述】:

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

我用广播接收器来做这个。

当我启动应用程序时,一切顺利,但没有吐司我有 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>

【问题讨论】:

  • 在清单中声明的​​隐式广播接收器自 android Oreo 以来不起作用。您需要有一个处于活动或服务中的接收器,并保持您的应用处于活动状态以接收更新。
  • @Pawel 感谢您的留言。如果关闭应用程序时广播不起作用,您能否向我解释人们如何更新这样的内容:imgur.com/a/cMyFpsA 没有打开应用程序?他们用什么?

标签: android xml android-studio kotlin


【解决方案1】:

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

    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
        )) 


    }
}

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

【讨论】:

    猜你喜欢
    • 2011-04-29
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多