【问题标题】:Exoplyaer won't return current position from service to activity?Exoplayer 不会将当前位置从服务返回到活动?
【发布时间】: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


    【解决方案1】:

    如果您正在寻找与Service 类中的Activity 交流的方法,请使用LocalBroadcastManager

    Activity内部,创建广播接收器并注册

    private val playerStateChangedReceiver = object : BroadcastReceiver() {
        override fun onReceive(context: Context?, intent: Intent?) {
            if (intent?.action == "player_state_changed") {
                val currentPosition = intent.getIntExtra("current_position", 0)
                toast("Current position: $currentPosition")
            }
        }
    }
    
     override fun onStart() {
        super.onStart()
        LocalBroadcastManager.getInstance(context)
            .registerReceiver(playerStateChangedReceiver, IntentFilter("player_state_changed"))
    }
    
    override fun onStop() {
        super.onStop()
        LocalBroadcastManager.getInstance(context)
            .unregisterReceiver(playerStateChangedReceiver)
    }
    

    Service 发送广播

    LocalBroadcastManager.getInstance(context)
                    .sendBroadcast(Intent("player_state_changed").apply {
                        putExtra("current_position", adapterPosition)
                    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-07
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多