【发布时间】:2020-10-22 14:28:15
【问题描述】:
我的service 班级中有Exoplayer。我想将exoplayer 当前位置从service 发送到activity。我创建了一个broadcast receiver 用于交流。这是我的活动类中的广播接收器代码
class LocalAudioPlayer : AppCompatActivity() {
inner class LocalAudioReceiver: BroadcastReceiver() {
override fun onReceive(p0: Context?, intent: Intent?) {
Log.i("here","here34")
intent?.getStringExtra("message")?.let { Log.i("heythere", it) }
}
}
override fun onStart() {
super.onStart()
registerReceiver()
}
override fun onStop() {
unregisterReceiver(localAudioReceiver)
super.onStop()
}
private fun registerReceiver() {
localAudioReceiver = LocalAudioReceiver()
val intentFilter = IntentFilter()
intentFilter.addAction(SENDMESAGGE)
registerReceiver(localAudioReceiver, intentFilter)
} ..
以下是我尝试将数据从服务发送回活动的方式
第一种方式
我在onStartCommand的服务中写了以下代码
p
layer?.addListener(object : Player.EventListener {
override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {
when (playbackState) {
Player.STATE_ENDED -> {
// showControls();
// Toast.makeText(getApplicationContext(), "Playback ended", Toast.LENGTH_LONG).show();
}
Player.STATE_BUFFERING -> {
Log.i("heyyy","nnnnn")
passMessageToActivity(player?.currentPosition.toString())
Handler(Looper.getMainLooper()).postDelayed({
Log.i("hey123", "here123")
passMessageToActivity(player?.currentPosition.toString())
}, 0)
// progressBar.setVisibility(View.VISIBLE);
// Toast.makeText(getApplicationContext(), "Buffering..", Toast.LENGTH_SHORT).show();
}
Player.STATE_READY -> {
// progressBar.setVisibility(View.INVISIBLE);
}
Player.STATE_IDLE -> {
}
}
}
})
第二种方法我尝试将上述代码从onStartCommand 移动到onCreate,但它不起作用
第三条路
尝试在 onCreate 中添加上述代码,但不起作用
Handler(Looper.getMainLooper()).postDelayed({
Log.i("hey123","here123")
passMessageToActivity(player?.currentPosition.toString())
}, 0)
第四条路
Runnable {
passMessageToActivity(player?.currentPosition.toString())
}
我在服务的onBind 中返回 null。这是造成问题吗?
我想不断地将 exoplayer 当前位置从服务发送到活动
【问题讨论】:
标签: android kotlin android-activity broadcastreceiver android-service