对不起,我是个真正的新手,但我有个心理障碍......我在一个服务里有媒体播放器,还有一个带播放按钮的片段,我想控制媒体播放器......这是片段类。
class PlayerFragment : Fragment() {
companion object {
fun newInstance() = PlayerFragment()
}
private lateinit var viewModel: PlayerViewModel
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.player_fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(this).get(PlayerViewModel::class.java)
// TODO: Use the ViewModel
Btn_playPause.setOnClickListener { MediaPlayer().start()}
}
}
而这是服务类
class MusicService : Service(), MediaPlayer.OnPreparedListener {
private var pause:Boolean = false
inner class MusicServiceBinder : Binder()
{
fun getService() : MusicService
{
return this@MusicService // the outer 'this'
}
}
override fun onBind(intent: Intent) : IBinder {
return MusicServiceBinder()
}
val mediaFile = File("${Environment.getExternalStorageDirectory().getAbsolutePath()}/Music/Over_The_Horizon.mp3")
override fun onPrepared(mp: MediaPlayer?) {
TODO("Not yet implemented")
val player = MediaPlayer()
player.setAudioStreamType(AudioManager.STREAM_MUSIC)
player.setDataSource(applicationContext, Uri.fromFile(mediaFile))
mp?.start()
player.prepareAsync()
}}
任何帮助非常感谢!
在这里,我可以给你建议一个简单的方法,通过使用本地广播接收器从片段中获得控制。
LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("Play"));//Here is Play as an action.
通过从片段中发送这个动作,并在你的服务中注册 "播放 "动作的intent-filter,你的服务就会收到这个intent并执行相应的动作。