freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

mp3播放器項目實踐-預(yù)覽頁

2025-08-21 08:55 上一頁面

下一頁面
 

【正文】 置工程中需要下載和用到的文件 // String xml=downloadXML(:8080/Mp3/)。 } Override public boolean onOptionsItemSelected(MenuItem item) { if(()==UPDATE){ //點擊更新列表 updateListView()。 return result。 try { reader = ().getXMLReader()。 (new InputSource(new StringReader(xmlStr)))。 (mp3info)。 } return infos。 ()。 } public File createFile(String dir,String fileName){ File file=new File(SDPATH+dir+fileName+)。 } public File wirtetoSdcard(String dirName,String fileName,InputStream input){ createDir(dirName)。 try { output=new FileOutputStream(file)。 } catch (IOException e) { // TODO Autogenerated catch block ()。 } } return file。public class HttpDownloader { public InputStream getInput(URL url){ HttpURLConnection conn=null。 } catch (IOException e) { // TODO Autogenerated catch block ()。 StringBuffer sb = new StringBuffer()。 // 創(chuàng)建一個Http連接 input=getInput(url)。 } finally { try { ()。 * 返回0:代表下載成功; * 返回1:代表下載失敗 */ public int fileDownload(String strUrl,String dirName,String fileName){ InputStream input = null。 } else{ try { url=new URL(strUrl)。 } } catch (MalformedURLException e) { ()。新建一個線程內(nèi)部類,在該線程中執(zhí)行下載。import 。 mp3info=(Mp3Info) (mp3info)。 public DownloadThread(Mp3Info mp3info){ =mp3info。 if(i==0){ (文件下載成功!)。import 。import 。import 。import 。import 。import 。 private static final int ABOUT=2。 updateListView()。 } private SimpleAdapter buildSimpleAdapter(ListMp3Info mp3infos){ ArrayListHashMapString,String list = new ArrayListHashMapString,String()。 HashMapString,String mp3=new HashMapString,String()。 } SimpleAdapter simple= new SimpleAdapter(this, list, , new String[] {mp3_name,mp3_size}, new int[] {,})。 SimpleAdapter simple=buildSimpleAdapter(mp3infos)。 } private String downloadXML(String urlStr){ HttpDownloader downloader=new HttpDownloader()。 XMLReader reader。 Mp3ListContentHandler mp3listhandler=new Mp3ListContentHandler(infos)。 } catch (ParserConfigurationException e) { // TODO Autogenerated catch block ()。 Intent intent=new Intent()。 (l, v, position, id)。同時,并將啟動類的activity改為MainActivity代碼如下: : ?xml version= encoding=utf8?TabHost xmlns:android= android:id=android:id/tabhost android:layout_width=fill_parent android:layout_height=fill_parent android:padding=5dp LinearLayout android:orientation=vertical android:layout_width=fill_parent android:layout_height=fill_parent android:padding=5dp TabWidget android:id=android:id/tabs android:layout_width=fill_parent android:layout_height=wrap_content / FrameLayout android:id=android:id/tabcontent android:layout_width=fill_parent android:layout_height=fill_parent android:padding=5dp / /LinearLayout/TabHost:import 。import 。 gettabHost(, Local, )。 (this,intentClass)。 (Spec)。 for (int i = 0。 (files[i].length()+)。import 。import .*。 ListMp3Info localMp3Infos=new ArrayListMp3Info()。 ()。 (mp3_size, ())。 } Override protected void onResume() { updateListView()。 Intent intent=new Intent()。 } } 在PlayerActivity類中實現(xiàn)播放、暫停和停止按鈕的功能,具體功能如 下: ①首次進(jìn)入PlayerActivity界面時,只有點擊Play按鈕會有事件響應(yīng) ②在暫停和停止?fàn)顟B(tài)點擊Play可以進(jìn)行播放,其中:在暫停后點擊Play 會繼續(xù)播放,在停止后點擊Play會重新播放 ③只有在播放狀態(tài)時點擊Pause按鈕才會觸發(fā)暫停事件 ④在暫停狀態(tài)下,點擊暫停按鈕可以繼續(xù)播放代碼如下: import 。import 。import 。 private Mp3Info mp3Info。 private MediaPlayer mediaPlayer。 setContentView()。 (new startListener())。(false)。 isStop=false。 isPause=false。 } } } } public String getUri(Mp3Info mp3Info){ String sdPath=().getAbsolutePath()。第五集:將Mp3的播放、暫停和停止功能放在一個Service,而不是原有的Activity中執(zhí)行(提高其優(yōu)先級)。設(shè)置lrcName和lrcSize: public ListMp3Info getLocalMp3Info(String dirName){ ListMp3Info localMp3Infos=new ArrayListMp3Info()。 i 。 (files[i+1].getName())。 }在PlayerActivity中,通過Handler控制一個run函數(shù)反復(fù)執(zhí)行來不 斷比較已經(jīng)播放的時間與通過LrcProcesser處理后的時間隊列中的時 間,在合適的時間取出時間隊列和歌詞隊列中對應(yīng)的隊列元素,將歌詞隊列 顯示在lrcText(一個TextView)中,從而實現(xiàn)歌詞的同步更新。import 。import 。import 。 private boolean isPlay=false。 Override public IBinder onBind(Intent arg0) { // TODO Autogenerated method stub return null。 } else if(msg==){ pause()。 } private void play(){ if(!isPlay){ mediaPlayer=(this, (getUri(localmp3Info)))。 isPause=false。 }else{ ()。 isPlay=false。 }}注意點:為傳遞按下不同按鈕時的不同Msg,應(yīng)將Msg賦值為一個定義的常量,而不是一個具體的數(shù)據(jù),這樣以便以后修改和程序的擴(kuò)展。該類中實現(xiàn)以下功能(LRC文件處理的邏輯分析):① 根據(jù)讀取LRC文件得到的字節(jié)流input對LRC文件進(jìn)行一行一行的讀 ?。˙ufferedReader);② 在讀取到的每一行中,以正則表達(dá)式判斷是否具有[]符號,以判斷該行 中是否具有對應(yīng)時間和歌詞;(注意:如果LRC文件中有[]中不是時間的 行,需要將LRC文件進(jìn)行處理:刪除該行,或者將[]中的文字改為時間)③ 如果在讀取到的LRC文件的一行中具有[]符號,則需要在讀取改行以后 做以下兩個工作:(1) 將檢測到[]之前讀取到的[]中的時間和與該時間對應(yīng)的歌詞內(nèi)容經(jīng)過處理(調(diào)用處理時間的方法timeToLong(),用substring()方法得到歌詞)存放到時間隊列和歌詞隊列中(注意第一次檢測到[]時存放了一個空時間節(jié)點和空歌詞節(jié)點,這就需要在PlayerActivity中調(diào)用LrcProcesser取的List并得到時間隊列和歌詞隊列后立即取出一個時間節(jié)點和一個歌詞節(jié)點扔掉(poll()方法))(2) 通過java中Pattern類的match()方法和Matcher類的group()方法取得[]中內(nèi)容,以及該行中除了[]以外的內(nèi)容(即歌詞),并將歌詞內(nèi)容存放到一個清空的message中。import .*。 ArrayListQueue queues=new ArrayListQueue()。 } String line。 try { while((line=())!=null){ Matcher m=(line)。 timeMill=timeToLong((1, 9))。 (messages)。 } public Long timeToLong(String timeStr){ Long timeMill = null。 int secends=(ss[0])。 }} 在PlayerActivity類中實現(xiàn)歌詞同步顯示功能的邏輯分析: 歌詞的同步實現(xiàn)是根據(jù)LrcProcesser處理后得到的實際隊列中的每個時間節(jié)點中的時間與Mp3總共播放的時間進(jìn)行比較后決定是否應(yīng)該在TextView中顯示歌詞隊列中與該時間節(jié)點對應(yīng)的歌詞節(jié)點中的歌詞內(nèi)容。因此將以上過程放在實現(xiàn)了Runnable接口的內(nèi)部類UpdateLrc的run()函數(shù)中,并在run()函數(shù)中調(diào)用Handler的postDelayed()方法,以實現(xiàn)每隔一定的時間(10毫秒)執(zhí)行一次run()函數(shù)中的過程。
點擊復(fù)制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1