日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

安卓锁屏音乐控件开发

發(fā)布時(shí)間:2024/1/18 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 安卓锁屏音乐控件开发 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? ? ? ? ? ? ?首先我個(gè)人先吐槽一下,這是一個(gè)吃力不討好的活。為什么?因?yàn)楝F(xiàn)在安卓手機(jī)的各種定制rom五花八門(mén),各種各樣,miui、樂(lè)蛙、emui、努比亞。。。我們今天要做的事情就是要在各種系統(tǒng)的鎖屏界面,出現(xiàn)一個(gè)音樂(lè)控件,用來(lái)做一些簡(jiǎn)單的音樂(lè)播放的控制。

? ? ? ? ? ? ?做之前,習(xí)慣性的看了各大家的做法:酷我、多米等,這些家的做法的思路都一樣,都是在自己的應(yīng)用中監(jiān)聽(tīng)power鎖屏事件,然后加一個(gè)“假鎖屏”,即每次鎖屏再打開(kāi)的時(shí)候,首先顯示的是自己音樂(lè)的鎖屏,滑開(kāi)以后再跳到系統(tǒng)的鎖屏。這樣做的好處是,通吃各種系統(tǒng),弊端也是顯而易見(jiàn):鎖屏太多了!!!尼瑪,對(duì)于普通用戶(hù),究竟要滑幾次才能解開(kāi)?

假鎖屏的方案棄置后,只能犧牲適配性,而考慮實(shí)用性,于是有了本文。本文做的是,針對(duì)安卓原生系統(tǒng)開(kāi)發(fā)的音樂(lè)控件!因?yàn)槭墙⒃谠膋eyguard上的,所以一些野路子第三方ROM不支持,也是正常。正文開(kāi)始:

? ? ? ? ? ? ? 基于原生android開(kāi)發(fā),需要用的一個(gè)很重要的類(lèi)RemoteControlClient,RemoteControlClient是從API 14也就是android 4.0開(kāi)始出現(xiàn)的類(lèi),用于在鎖屏狀態(tài)控制音樂(lè)播放。界面是系統(tǒng)提供的。

api doc文檔上附了一段注冊(cè)代碼

<pre class="prettyprint" name="code" style="white-space: pre-wrap; word-wrap: break-word; font-size: 14px; margin-top: 0px; margin-bottom: 1em; color: rgb(0, 102, 0); line-height: 1.5; font-family: 'courier new', courier, monospace; padding: 1em; overflow: auto; border: 1px solid rgb(221, 221, 221); background-color: rgb(247, 247, 247);"><span class="typ" style="color: rgb(102, 0, 102);">ComponentName</span><span class="pln" style="color: rgb(0, 0, 0);"> myEventReceiver </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 136);">new</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">ComponentName</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">getPackageName</span><span class="pun" style="color: rgb(102, 102, 0);">(),</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">MyRemoteControlEventReceiver</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="kwd" style="color: rgb(0, 0, 136);">class</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">getName</span><span class="pun" style="color: rgb(102, 102, 0);">());</span><span class="pln" style="color: rgb(0, 0, 0);"></span><span class="typ" style="color: rgb(102, 0, 102);">AudioManager</span><span class="pln" style="color: rgb(0, 0, 0);"> myAudioManager </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="typ" style="color: rgb(102, 0, 102);">AudioManager</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln" style="color: rgb(0, 0, 0);"> getSystemService</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="typ" style="color: rgb(102, 0, 102);">Context</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">AUDIO_SERVICE</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">myAudioManager</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">registerMediaButtonEventReceiver</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">myEventReceiver</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);"></span><span class="com" style="color: rgb(136, 0, 0);">// build the PendingIntent for the remote control client</span><span class="pln" style="color: rgb(0, 0, 0);"></span><span class="typ" style="color: rgb(102, 0, 102);">Intent</span><span class="pln" style="color: rgb(0, 0, 0);"> mediaButtonIntent </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 136);">new</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">Intent</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="typ" style="color: rgb(102, 0, 102);">Intent</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">ACTION_MEDIA_BUTTON</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">mediaButtonIntent</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">setComponent</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">myEventReceiver</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);"></span><span class="typ" style="color: rgb(102, 0, 102);">PendingIntent</span><span class="pln" style="color: rgb(0, 0, 0);"> mediaPendingIntent </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">PendingIntent</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">getBroadcast</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">getApplicationContext</span><span class="pun" style="color: rgb(102, 102, 0);">(),</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="lit" style="color: rgb(0, 102, 102);">0</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> mediaButtonIntent</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="lit" style="color: rgb(0, 102, 102);">0</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);"></span><span class="com" style="color: rgb(136, 0, 0);">// create and register the remote control client</span><span class="pln" style="color: rgb(0, 0, 0);"></span><span class="typ" style="color: rgb(102, 0, 102);">RemoteControlClient</span><span class="pln" style="color: rgb(0, 0, 0);"> myRemoteControlClient </span><span class="pun" style="color: rgb(102, 102, 0);">=</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="kwd" style="color: rgb(0, 0, 136);">new</span><span class="pln" style="color: rgb(0, 0, 0);"> </span><span class="typ" style="color: rgb(102, 0, 102);">RemoteControlClient</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">mediaPendingIntent</span><span class="pun" style="color: rgb(102, 102, 0);">);</span><span class="pln" style="color: rgb(0, 0, 0);">myAudioManager</span><span class="pun" style="color: rgb(102, 102, 0);">.</span><span class="pln" style="color: rgb(0, 0, 0);">registerRemoteControlClient</span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln" style="color: rgb(0, 0, 0);">myRemoteControlClient</span><span class="pun" style="color: rgb(102, 102, 0);">);</span> 上面的代碼開(kāi)始時(shí)注冊(cè)了耳機(jī)按鍵的事件,接著注冊(cè)了RemoteControlClient。

要想弄出RemoteControlClient的界面,上面的代碼還不夠,還需要把當(dāng)前音樂(lè)狀態(tài)設(shè)置為正在播放

[java]? view plain copy
  • mClient.setPlaybackState(RemoteControlClient.PLAYSTATE_PLAYING)??
  • 并且必須獲取當(dāng)前的stream focus

    [java]? view plain copy
  • am.requestAudioFocus(new?OnAudioFocusChangeListener()?{??
  • ??????
  • ????@Override??
  • ????public?void?onAudioFocusChange(int?focusChange)?{??
  • ????????System.out.println("focusChange?=?"?+?focusChange);??
  • ????}??
  • },?AudioManager.STREAM_MUSIC,?AudioManager.AUDIOFOCUS_GAIN);??

  • 這樣,在鎖屏狀態(tài)系統(tǒng)界面就能出現(xiàn)了,默認(rèn)只有一個(gè)播放暫停按鈕。要想顯示額外的信息,使用editMetadata(boolean startEmpty)去put,如果想多顯示幾個(gè)控制按鈕,如下:

    [java]? view plain copy
  • int?flags?=?RemoteControlClient.FLAG_KEY_MEDIA_PREVIOUS??
  • ????????|?RemoteControlClient.FLAG_KEY_MEDIA_NEXT??
  • ????????|?RemoteControlClient.FLAG_KEY_MEDIA_PLAY??
  • ????????|?RemoteControlClient.FLAG_KEY_MEDIA_PAUSE??
  • ????????|?RemoteControlClient.FLAG_KEY_MEDIA_PLAY_PAUSE??
  • ????????|?RemoteControlClient.FLAG_KEY_MEDIA_STOP;??
  • mClient.setTransportControlFlags(flags);??

  • 所有按鍵的響應(yīng)事件都在注冊(cè)的receiver中。

    總結(jié)

    以上是生活随笔為你收集整理的安卓锁屏音乐控件开发的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。