MusicPlayActivity.kt 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840
  1. package com.jld.vod.view
  2. import android.app.Activity
  3. import android.app.Service
  4. import android.content.*
  5. import android.graphics.drawable.Drawable
  6. import android.os.Handler
  7. import android.os.IBinder
  8. import android.os.Looper
  9. import android.os.Message
  10. import android.view.MotionEvent
  11. import android.view.View
  12. import android.widget.ImageView
  13. import android.widget.RelativeLayout
  14. import android.widget.SeekBar
  15. import android.widget.TextView
  16. import com.bumptech.glide.Glide
  17. import com.bumptech.glide.request.target.SimpleTarget
  18. import com.bumptech.glide.request.transition.Transition
  19. import com.google.gson.Gson
  20. import com.jld.vod.R
  21. import com.jld.vod.audio.MusicController
  22. import com.jld.vod.audio.MusicControllerImp
  23. import com.jld.vod.base.BaseActivity
  24. import com.jld.vod.config.AudioFlag
  25. import com.jld.vod.config.AudioPlayerConstant
  26. import com.jld.vod.config.AudioPlayerConstant.ACITION_AUDIO_PLAYER_PAUSE
  27. import com.jld.vod.config.AudioPlayerConstant.ACITION_AUDIO_PLAYER_PLAY
  28. import com.jld.vod.config.AudioPlayerConstant.ACITION_AUDIO_PLAYER_PLAY_COMPLETE
  29. import com.jld.vod.config.AudioPlayerConstant.ACITION_AUDIO_PLAYER_PREPARE
  30. import com.jld.vod.config.AudioPlayerConstant.ACITION_AUDIO_PLAYER_STOP
  31. import com.jld.vod.config.AudioPlayerConstant.playerState
  32. import com.jld.vod.config.Config
  33. import com.jld.vod.model.bean.Audio
  34. import com.jld.vod.model.bean.MusicByMidBean
  35. import com.jld.vod.model.bean.MusicByMidBeans
  36. import com.jld.vod.service.MusicPlayerService
  37. import com.jld.vod.ui.animator.RatateImage
  38. import com.jld.vod.ui.animator.RatateRobotArm
  39. import com.jld.vod.utils.*
  40. import com.jld.vod.utils.http.OkHttpUtils
  41. import com.jld.vod.viewmodel.MusicPlayViewModel
  42. import com.smp.soundtouchandroid.AudioSpeed
  43. import com.smp.soundtouchandroid.MediaCallBack
  44. import com.smp.soundtouchandroid.OnProgressChangedListener
  45. import kotlinx.android.synthetic.main.activity_main.fl_bg
  46. import kotlinx.android.synthetic.main.activity_main.iv_back_page
  47. import kotlinx.android.synthetic.main.activity_main.iv_brightness
  48. import kotlinx.android.synthetic.main.activity_main.iv_fl_power
  49. import kotlinx.android.synthetic.main.activity_main.iv_home
  50. import kotlinx.android.synthetic.main.activity_main.iv_power
  51. import kotlinx.android.synthetic.main.activity_main.iv_volume
  52. import kotlinx.android.synthetic.main.activity_main.tv_main_time
  53. import kotlinx.android.synthetic.main.activity_main.tv_main_week
  54. import kotlinx.android.synthetic.main.activity_musice_play.*
  55. import okhttp3.Call
  56. import okhttp3.Response
  57. import java.io.IOException
  58. import java.util.*
  59. /**
  60. * @author ZhaoFuXin
  61. * @Email:18276061387@163.com
  62. * @description:
  63. * @date :2020/7/7 11:37
  64. */
  65. class MusicPlayActivity : BaseActivity(),View.OnClickListener {
  66. private val TAG:String = "MusicPlayActivity"
  67. //音频播放类
  68. private var audio: Audio? = null
  69. //上一首
  70. private var audio_preImg: ImageView? = null
  71. //播放
  72. private var audio_playImg: ImageView? = null
  73. //下一首
  74. private var audio_nextImg: ImageView? = null
  75. private var speed = AudioSpeed.SPEED_NORMAL
  76. private var context: Activity? = null
  77. //显示UI
  78. private val MSG_SHOW_UI = 1
  79. //准备播放
  80. private val MSG_AUDIO_PREPARE = MSG_SHOW_UI + 1
  81. //自动播放
  82. private val MSG_AUTO_PLAY = MSG_AUDIO_PREPARE + 1
  83. private var albumView: RelativeLayout? = null
  84. private var ratateImage: RatateImage? = null
  85. private var ratateRobotArm: RatateRobotArm? = null//机械臂
  86. //播放总时间
  87. private var audio_totalTimeTv: TextView? = null
  88. //进度条
  89. private var skbProgress: SeekBar? = null
  90. //当前播放的进度
  91. private var audio_curren_playTv: TextView? = null
  92. private var connect = false
  93. private var musicController: MusicController? = null
  94. private var musicId:Int = 0;
  95. private var discMagneticStripe:ImageView? = null
  96. private var receiver: broadCastRecever = broadCastRecever()//更新时间广播
  97. private lateinit var musicPlayViewModel: MusicPlayViewModel
  98. private val handler: Handler = object : Handler() {
  99. override fun handleMessage(msg: Message) {
  100. super.handleMessage(msg)
  101. when (msg.what) {
  102. MSG_SHOW_UI -> update()
  103. MSG_AUTO_PLAY -> autoPlay(needPlay)
  104. }
  105. }
  106. }
  107. /**
  108. * 播放回调
  109. */
  110. var mediaCallBack: MediaCallBack = object : MediaCallBack {
  111. override fun onError() {}
  112. override fun onChange(state: Int) {
  113. if (state == AudioPlayerConstant.ACITION_AUDIO_PLAYER_PLAY_PRE_AUDIO || state == AudioPlayerConstant.ACITION_AUDIO_PLAYER_PLAY_NEXT_AUDIO) {
  114. playerState = 0
  115. if (musicController != null) {
  116. setAudio(musicController!!.audio)
  117. setCurrentProgress(0)
  118. tv_music_name.setText(audio!!.name)
  119. tv_music_singer.setText(audio!!.author)
  120. // addAudioTitle()
  121. }
  122. } else {
  123. playerState = state
  124. }
  125. LogUtils.logD(TAG, "onChange=$state")
  126. changePlayUI()
  127. }
  128. override fun onPrepare() {
  129. LogUtils.logD(TAG, "onPrepare()")
  130. runOnUiThread { showLoading() }
  131. }
  132. override fun onPrepared(duration: Long) {
  133. LogUtils.logD(TAG, "onPrepared()")
  134. setInitDate(duration)
  135. }
  136. override fun onPlay() {
  137. LogUtils.logD(TAG, "onPlay()")
  138. runOnUiThread { finishLoading() }
  139. }
  140. override fun onStop() {
  141. LogUtils.logD(TAG, "onStop()")
  142. }
  143. override fun onPause() {
  144. LogUtils.logD(TAG, "onPause()")
  145. }
  146. override fun onComplete() {
  147. LogUtils.logD(TAG, "onComplete()")
  148. }
  149. }
  150. override fun getLayoutId(): Int {
  151. return R.layout.activity_musice_play
  152. }
  153. private fun setAudio(audio: Audio) {
  154. this.audio = audio
  155. }
  156. override fun onNewIntent(intent: Intent?) {
  157. super.onNewIntent(intent)
  158. LogUtils.logD(TAG, "onNewIntent")
  159. if (intent != null) {
  160. var audio: Audio? = intent.getSerializableExtra("audio") as Audio
  161. val play = intent.getBooleanExtra("play", false)
  162. val isHead = intent.getBooleanExtra("isHead", false)
  163. if (isHead && audio == null) {
  164. if (musicController != null) {
  165. audio = musicController!!.audio
  166. }
  167. }
  168. if (audio != null) {
  169. if (!isSame(audio)) {
  170. setAudio(audio)
  171. changeToCurrent(play)
  172. } else {
  173. judgeState()
  174. changePlayUI()
  175. if (playerState == ACITION_AUDIO_PLAYER_PAUSE) {
  176. if (musicController != null && musicController!!.isPause) {
  177. setCurrentProgress(musicController!!.playedDuration)
  178. }
  179. }
  180. }
  181. }
  182. }
  183. }
  184. /**
  185. * 是否相同
  186. */
  187. private fun isSame(audio: Audio?): Boolean {
  188. return if (audio == null) false else this.audio != null && audio.id === this.audio!!.id
  189. }
  190. /**
  191. * 变换到现在
  192. */
  193. private fun changeToCurrent( needPlay:Boolean) {
  194. if (needPlay) {
  195. play(audio);
  196. } else if (musicController != null) {
  197. judgeState();
  198. autoPlay(false);
  199. changePlayUI();
  200. }
  201. }
  202. /**
  203. * 进度
  204. */
  205. private fun setCurrentProgress(position: Long) {
  206. if (skbProgress != null) {
  207. skbProgress!!.progress = position.toInt()
  208. }
  209. if (audio_curren_playTv != null) {
  210. audio_curren_playTv!!.setText(getTimeStr(position.toInt()))
  211. }
  212. }
  213. /**
  214. * 初始化view
  215. */
  216. override fun initView() {
  217. super.initView()
  218. //上一首
  219. audio_preImg = findViewById(R.id.act_audio_player_button_prebuttonId)
  220. audio_preImg!!.setOnClickListener(this)
  221. //播放
  222. audio_playImg = findViewById(R.id.act_audio_player_button_playId)
  223. audio_playImg!!.setOnClickListener(this)
  224. //下一首
  225. audio_nextImg = findViewById(R.id.act_audio_player_button_nextId)
  226. audio_nextImg!!.setOnClickListener(this)
  227. //旋转图片
  228. albumView = findViewById(R.id.play_album_is)
  229. //机械臂
  230. discMagneticStripe = findViewById(R.id.iv_disc_magnetic_stripe)
  231. //总时间
  232. audio_totalTimeTv = findViewById(R.id.act_audio_player_total_timeId)
  233. //播放进度时间
  234. audio_curren_playTv = findViewById(R.id.act_audio_player_current_play_timeId)
  235. //进度条
  236. skbProgress = findViewById(R.id.act_audio_player_audio_progressId)
  237. //滑动监听
  238. skbProgress!!.setOnSeekBarChangeListener(SeekBarChangeEvent())
  239. iv_back_page.setOnClickListener {
  240. this.onBackPressed()
  241. }
  242. iv_home.setOnClickListener {
  243. go<HomeActivity>()
  244. finish()
  245. }
  246. //音量调节
  247. iv_volume.setOnClickListener {
  248. PopupUtils.popupUtilsVolume(this,iv_volume)
  249. }
  250. //待机
  251. iv_power.setOnClickListener {
  252. fl_bg.visibility = View.VISIBLE
  253. Config.isShowAd = false
  254. }
  255. iv_fl_power.setOnClickListener {
  256. fl_bg.visibility = View.INVISIBLE
  257. Config.isShowAd = true
  258. }
  259. //背光设置
  260. iv_brightness.setOnClickListener {
  261. PopupUtils.popupUtilsbrightness(this,iv_brightness)
  262. }
  263. //解决穿透问题
  264. fl_bg.setOnTouchListener(object :View.OnTouchListener {
  265. override fun onTouch(v: View?, event: MotionEvent?): Boolean {
  266. return true
  267. }
  268. });
  269. //标题聚焦
  270. tv_music_name.setSelected(true)
  271. }
  272. /**
  273. * 初始化数据
  274. */
  275. override fun initData() {
  276. super.initData()
  277. val intent = intent
  278. context = this
  279. val bundle = intent.extras
  280. musicId = bundle!!.get("id") as Int
  281. val cid = bundle.get("cid")
  282. val mid = bundle.get("mid")
  283. val lid = bundle.get("lid")
  284. //初始化viewmodel
  285. // musicPlayViewModel = ViewModelProviders.of(this)
  286. // .get(MusicPlayViewModel::class.java)
  287. // musicPlayViewModel.findMusicMid()
  288. //获取一级列表数据
  289. // val observer = Observer<List<MusicByMidBean>> { it->
  290. // setTest(it)
  291. // }
  292. // musicPlayViewModel.findMovieMidliveData.observe(this, observer)
  293. if (Config.isMusicAll)//是否全部列表
  294. {
  295. OkHttpUtils.getInstance().getDataAsyn(Config.ApiBaseUrl+ "/music/findMusicByMid?mid=$mid&lid=$lid",object :OkHttpUtils.MyNetCall{
  296. override fun failed(call: Call?, e: IOException?) {
  297. LogUtils.logE("e="+e)
  298. }
  299. override fun success(call: Call?, response: Response?) {
  300. try {
  301. val json = response!!.body!!.string()
  302. val gson = Gson()
  303. val music = gson.fromJson(json, MusicByMidBeans::class.java)
  304. setTest(music.data)
  305. }catch (e : Exception)
  306. {
  307. e.printStackTrace()
  308. }
  309. //LogUtils.logD("response"+music.code)
  310. }
  311. })
  312. }else{
  313. OkHttpUtils.getInstance().getDataAsyn(Config.ApiBaseUrl+ "/music/findMusicByCid?cid=$cid&mid=$mid&lid=$lid",object :OkHttpUtils.MyNetCall{
  314. override fun failed(call: Call?, e: IOException?) {
  315. LogUtils.logE("e="+e)
  316. }
  317. override fun success(call: Call?, response: Response?) {
  318. try {
  319. val json = response!!.body!!.string()
  320. val gson = Gson()
  321. val music = gson.fromJson(json, MusicByMidBeans::class.java)
  322. setTest(music.data)
  323. }catch (e : Exception)
  324. {
  325. e.printStackTrace()
  326. }
  327. //LogUtils.logD("response"+music.code)
  328. }
  329. })
  330. }
  331. }
  332. /**
  333. * 初始化事件
  334. */
  335. override fun initEvent() {
  336. super.initEvent()
  337. handler.sendEmptyMessage(MSG_SHOW_UI)
  338. ratateImage = RatateImage(this, albumView)
  339. ratateRobotArm = RatateRobotArm(this, discMagneticStripe!!)
  340. //动态背景图片
  341. val main_bg_img = SharedPrefUtils.getString(this,"main_bg_img")
  342. try {
  343. if (!main_bg_img.isEmpty())
  344. {
  345. val simpleTarget: SimpleTarget<Drawable?> = object : SimpleTarget<Drawable?>() {
  346. override fun onResourceReady(resource: Drawable, transition: Transition<in Drawable?>?) {
  347. rl_music.setBackground(resource)
  348. }
  349. }
  350. Glide.with(this).load(com.jld.vod.config.Config.ApiBaseUrl+"/synchronization/previewImg?imgUrl="
  351. +main_bg_img).into(simpleTarget)
  352. }
  353. }catch (e: Exception)
  354. {
  355. e.printStackTrace()
  356. }
  357. }
  358. /**
  359. * 更新页面数据
  360. */
  361. private fun update() {
  362. //addAudioTitle()
  363. changePlayUI()
  364. }
  365. /**
  366. * 自动播放
  367. */
  368. private fun autoPlay(needPlay: Boolean) {
  369. LogUtils.logD( "autoPlay:playerState=$playerState")
  370. when (playerState) {
  371. AudioPlayerConstant.ACITION_AUDIO_PLAYER_PLAY -> if (musicController != null && musicController!!.isPlaying) {
  372. setInitDate(musicController!!.duration)
  373. }
  374. AudioPlayerConstant.ACITION_AUDIO_PLAYER_PAUSE -> if (musicController != null && musicController!!.isPause) {
  375. setInitDate(musicController!!.duration)
  376. setCurrentProgress(musicController!!.playedDuration)
  377. }
  378. else -> if (needPlay) {
  379. LogUtils.logD("autoPlaysssssssss")
  380. play()
  381. }
  382. }
  383. }
  384. /**
  385. * 初始时间
  386. */
  387. private fun setInitDate(duration: Long) {
  388. LogUtils.logD( "duration=$duration")
  389. if (musicController == null) return
  390. if (skbProgress != null) {
  391. skbProgress!!.setMax(duration.toInt())
  392. }
  393. if (audio_totalTimeTv != null) {
  394. audio_totalTimeTv!!.setText(getTimeStr(duration.toInt()))
  395. }
  396. }
  397. /**
  398. * 获取总时长
  399. */
  400. private fun getTimeStr(time: Int): String? {
  401. var time = time
  402. time = time / 1000000
  403. val min = time / 60 //分
  404. val second = time % 60
  405. var min1 = ""
  406. min1 = if (min < 10) {
  407. "0$min"
  408. } else {
  409. min.toString() + ""
  410. }
  411. var second1 = ""
  412. second1 = if (second < 10) {
  413. "0$second"
  414. } else {
  415. second.toString() + ""
  416. }
  417. return "$min1:$second1"
  418. }
  419. //音频列表
  420. private val audioList: MutableList<Audio> = ArrayList<Audio>()
  421. private fun setTest(music:List<MusicByMidBean>) {
  422. var musicName:String? = ""
  423. for ((index,e) in music.withIndex()) {
  424. //LogUtils.logD("清单:"+music[index])
  425. musicName = music[index].musicName
  426. val audio = Audio()
  427. //LogUtils.logD("MusicByMidBean"+e)
  428. audio.setFileUrl(Config.ApiBaseUrl+"/"+music[index].musicUrl)
  429. audio.setId((index.toLong() + 1))
  430. audio.setType(1)
  431. audio.setName(music[index].musicName)
  432. audio.author = music[index].musicSinger
  433. audioList.add(audio)
  434. }
  435. // LogUtils.logD("播放:$audioList----$musicId")
  436. for ((index,e) in audioList.withIndex()){
  437. LogUtils.logD("播放:$musicName-----"+audioList[index].name)
  438. if(audioList[index].name == musicName){
  439. // this.runOnUiThread {
  440. // tv_music_name.setText(audioList[index].name)
  441. // tv_music_singer.setText(audioList[index].author)
  442. // }
  443. this.audio = audioList[index]
  444. play(audio)
  445. }
  446. }
  447. this.audio = audioList[musicId]
  448. play(audio)
  449. LogUtils.logD("当前音乐"+audioList[musicId].name+ "---------"+audioList[musicId].author)
  450. this.runOnUiThread {
  451. tv_music_name.setText(audioList[musicId].name)
  452. tv_music_singer.setText(audioList[musicId].author)
  453. }
  454. }
  455. override fun onClick(v: View?) {
  456. when(v!!.id)
  457. {
  458. //进行播放/暂停
  459. R.id.act_audio_player_button_playId->{
  460. play(audio)
  461. }
  462. //上一首
  463. R.id.act_audio_player_button_prebuttonId->{
  464. if (musicController != null) {
  465. musicController!!.pre()
  466. tv_music_name.setText(audio!!.name)
  467. tv_music_singer.setText(audio!!.author)
  468. }
  469. }
  470. //下一首
  471. R.id.act_audio_player_button_nextId->{
  472. if (musicController != null) {
  473. musicController!!.next()
  474. tv_music_name.setText(audio!!.name)
  475. tv_music_singer.setText(audio!!.author)
  476. }
  477. }
  478. }
  479. }
  480. /**
  481. * 执行播放点击事件
  482. */
  483. private fun play(audio: Audio?) {
  484. if (audio == null) return
  485. this.audio = audio
  486. if (audio.fileUrl == null) return
  487. LogUtils.logD("点击的id = " + audio.id.toString() + " url=" + audio.fileUrl)
  488. judgeState()
  489. when (playerState) {
  490. ACITION_AUDIO_PLAYER_PLAY -> {
  491. LogUtils.logD("---执行暂停--")
  492. if (musicController != null) {
  493. musicController!!.pause()
  494. }
  495. }
  496. ACITION_AUDIO_PLAYER_PREPARE -> { }
  497. ACITION_AUDIO_PLAYER_PLAY_COMPLETE->{ }
  498. ACITION_AUDIO_PLAYER_STOP->{ }
  499. ACITION_AUDIO_PLAYER_PAUSE -> {
  500. LogUtils.logD("---执行播放--")
  501. play()
  502. }
  503. AudioFlag.NOT_PLAY_ITEM -> {
  504. LogUtils.logD("---播放特定的某一首--")
  505. play()
  506. }
  507. }
  508. }
  509. /**
  510. * 播放
  511. */
  512. private fun play() {
  513. if (!connect) {
  514. initMusicService(true)
  515. return
  516. }
  517. if (musicController != null) {
  518. musicController!!.play(audio)
  519. }
  520. }
  521. /**
  522. * 初始化音乐服务
  523. */
  524. var needPlay = false
  525. private fun initMusicService(needPlay: Boolean) {
  526. this.needPlay = needPlay
  527. val intent = Intent(this, MusicPlayerService::class.java)
  528. if (!AppUtil.isServiceRunning(this, MusicPlayerService::class.java.name)) {
  529. LogUtils.logD( "服务未开启")
  530. //开启服务
  531. startService(intent)
  532. }
  533. //绑定服务
  534. bindService(intent, serviceConnection, Service.BIND_AUTO_CREATE)
  535. }
  536. /**
  537. * 判断状态
  538. */
  539. private fun judgeState() {
  540. if (audio == null) return
  541. playerState = if (musicController != null && musicController!!.currentId === audio!!.id) {
  542. //musicController!!.state
  543. AudioFlag.NOT_PLAY_ITEM
  544. } else { //不是用以个音频
  545. AudioFlag.NOT_PLAY_ITEM
  546. }
  547. LogUtils.logD( "judgeState:playerState = $playerState")
  548. }
  549. /**
  550. * service绑定交互
  551. */
  552. private val serviceConnection: ServiceConnection = object : ServiceConnection {
  553. override fun onServiceConnected(name: ComponentName, service: IBinder) {
  554. connect = true
  555. if (service == null) return
  556. musicController = (service as MusicPlayerService.MyBinder).getMusicController()
  557. LogUtils.logD("musicController=$musicController")
  558. if (musicController!!.getPlayList() != null)
  559. {
  560. musicController!!.getPlayList().clear()
  561. }
  562. if (musicController!!.getPlayList() == null || musicController!!.getPlayList().isEmpty()) {
  563. if (audioList != null) {
  564. // LogUtils.logD("MusicByMidBeans"+audioList)
  565. musicController!!.setPlayList(audioList)
  566. }
  567. }
  568. musicController!!.setOnProgressChangedListener(progressChangedListener)
  569. musicController!!.setMediaCallBack(mediaCallBack)
  570. onPrepare()
  571. LogUtils.logD("onServiceConnected")
  572. }
  573. override fun onServiceDisconnected(name: ComponentName) {
  574. connect = false
  575. LogUtils.logD("onServiceDisconnected")
  576. }
  577. }
  578. /**
  579. * 进度监听
  580. */
  581. private val progressChangedListener: OnProgressChangedListener =
  582. object : OnProgressChangedListener {
  583. override fun onProgressChanged(track: Int, currentPercentage: Double, position: Long) {
  584. setCurrentProgress(position)
  585. }
  586. override fun onTrackEnd(track: Int) {}
  587. override fun onExceptionThrown(string: String) {}
  588. }
  589. private fun onPrepare() {
  590. if (musicController != null) {
  591. speed = musicController!!.temp
  592. }
  593. judgeState()
  594. changePlayUI()
  595. handler.sendEmptyMessage(MSG_AUTO_PLAY)
  596. }
  597. /**
  598. * 改变按钮状态
  599. */
  600. private fun changePlayUI() {
  601. LogUtils.logD("changePlayUI:playerState=$playerState")
  602. val isMainThread =
  603. Thread.currentThread() === Looper.getMainLooper().thread
  604. if (!isMainThread) {
  605. runOnUiThread { changePlayUIInternal() }
  606. } else {
  607. changePlayUIInternal()
  608. }
  609. }
  610. /**
  611. * 切换播放按钮和旋转碟盘
  612. */
  613. private fun changePlayUIInternal() {
  614. LogUtils.logD("changePlayUIInternal")
  615. when (playerState) {
  616. ACITION_AUDIO_PLAYER_PLAY -> {
  617. setImg(audio_playImg, R.mipmap.music_state_play)
  618. if (ratateImage != null) {
  619. ratateImage!!.startSpin()
  620. }
  621. if (ratateRobotArm != null)
  622. {
  623. ratateRobotArm!!.stopSpin()
  624. LogUtils.logD("stopSpin")
  625. }
  626. }
  627. ACITION_AUDIO_PLAYER_PAUSE -> {
  628. setImg(audio_playImg, R.mipmap.music_state_pause)
  629. if (ratateImage != null) {
  630. ratateImage!!.stopSpin()
  631. }
  632. if (ratateRobotArm != null)
  633. {
  634. ratateRobotArm!!.startSpin()
  635. }
  636. }
  637. ACITION_AUDIO_PLAYER_PLAY_COMPLETE -> {
  638. setImg(audio_playImg, R.mipmap.music_state_pause)
  639. if (ratateImage != null) {
  640. ratateImage!!.stopSpin()
  641. }
  642. if (ratateRobotArm != null)
  643. {
  644. ratateRobotArm!!.startSpin()
  645. }
  646. //更新进度
  647. if (skbProgress != null && skbProgress!!.getProgress() != skbProgress!!.getMax()) {
  648. skbProgress!!.setProgress(skbProgress!!.getMax())
  649. }
  650. }
  651. else -> {
  652. if (ratateImage != null) {
  653. ratateImage!!.stopSpin()
  654. }
  655. if (ratateRobotArm != null)
  656. {
  657. ratateRobotArm!!.startSpin()
  658. }
  659. setImg(audio_playImg, R.mipmap.music_state_pause)
  660. //更新进度
  661. if (skbProgress != null) {
  662. skbProgress!!.setProgress(0)
  663. }
  664. }
  665. }
  666. }
  667. /**
  668. * 切换播放按钮
  669. */
  670. private fun setImg(imageView: ImageView?, imgRes: Int) {
  671. if (imageView == null) return
  672. imageView.setImageResource(imgRes)
  673. }
  674. /**
  675. * 滑动条监听
  676. */
  677. inner class SeekBarChangeEvent : SeekBar.OnSeekBarChangeListener {
  678. //单位:rank_mark
  679. var progress: Long = 0
  680. var total_time: Long = 0
  681. var fromUser = false
  682. override fun onProgressChanged(
  683. seekBar: SeekBar,
  684. progress: Int,
  685. fromUser: Boolean) {
  686. if (musicController != null) {
  687. total_time = musicController!!.getDuration()
  688. if (seekBar.max != 0) {
  689. this.progress = progress * total_time / seekBar.max
  690. }
  691. }
  692. this.fromUser = fromUser
  693. }
  694. override fun onStartTrackingTouch(seekBar: SeekBar) {}
  695. override fun onStopTrackingTouch(seekBar: SeekBar) {
  696. if (fromUser) {
  697. LogUtils.logD("debug", " fromUser:$fromUser progress=$progress")
  698. //rank_mark—>ms
  699. if (musicController != null) {
  700. musicController!!.seekTo(progress)
  701. }
  702. }
  703. }
  704. }
  705. override fun onDestroy() {
  706. super.onDestroy()
  707. LogUtils.logD( "onDestroy")
  708. //如果音频正在播放,停止获取播放进度
  709. if (connect && serviceConnection != null) {
  710. if (musicController != null) {
  711. musicController!!.removeCallBack()
  712. // musicController!!.release()
  713. }
  714. LogUtils.logD( "unbindService")
  715. unbindService(serviceConnection)
  716. }
  717. unregisterReceiver(receiver)
  718. }
  719. override fun onStart() {
  720. super.onStart()
  721. //初始化当前时间
  722. var date: Date = Date(System.currentTimeMillis())
  723. var time = DateUtils.getTime(date)
  724. var dates = DateUtils.getDate(date)
  725. var week = DateUtils.getWeekOfDate(date)
  726. tv_main_time.text = time
  727. tv_main_week.text = dates +" "+ week
  728. //动态注册广播
  729. val filter = IntentFilter()
  730. filter.addAction(Intent.ACTION_TIME_TICK)
  731. registerReceiver(receiver, filter)
  732. }
  733. /**
  734. * 时间广播更新
  735. */
  736. inner class broadCastRecever : BroadcastReceiver() {
  737. //广播接收器
  738. override fun onReceive(context: Context?, intent: Intent?) {//接收广播后执行的操作
  739. var action: String? = intent!!.getAction()
  740. if (action.equals(Intent.ACTION_TIME_TICK)) {
  741. //获取当前时间
  742. var date: Date = Date(System.currentTimeMillis())
  743. var time = DateUtils.getTime(date)
  744. var dates = DateUtils.getDate(date)
  745. var week = DateUtils.getWeekOfDate(date)
  746. tv_main_time.text = time
  747. tv_main_week.text = dates + " " +week
  748. }
  749. }
  750. }
  751. }