編輯:關於Android編程
先不多說,直接上代碼
public class SimpleMediaPlayerActivity extends Activity { //private static final Uri mMusicUri = Uri.fromFile(new File("/sdcard/sound_file_1.mp3")); private static final Uri mMusicUri = Uri.parse("http://czanxi.azone.artron.net/users_info/88/czanxi/2009121322260351292.mp3"); private MediaPlayer mMediaPlayer = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); playMusic1(); } /** * 第一種方式,通過create創建 */ private void playMusic1() { stopCurrentMediaPlayer(); mMediaPlayer = MediaPlayer.create(this, mMusicUri); //prepared mMediaPlayer.start(); // no need to call prepare(); create() does that for you } /** * 第二種方式,通過new MediaPlayer()創建,通過prepare */ private void playMusic2() { stopCurrentMediaPlayer(); mMediaPlayer = new MediaPlayer(); //idle mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); try { mMediaPlayer.setDataSource(getApplicationContext(), mMusicUri); mMediaPlayer.prepare(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } mMediaPlayer.start(); } /** * 第三種方式,通過new MediaPlayer()創建,通過prepareAsync */ private void playMusic3() { mMediaPlayer = new MediaPlayer() ; mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC) ; mMediaPlayer.setOnPreparedListener(new OnPreparedListener() { @Override public void onPrepared(MediaPlayer mediaPlayer) { mediaPlayer.start() ; } }) ; try { mMediaPlayer.setDataSource(getApplicationContext(), mMusicUri); mMediaPlayer.prepareAsync() ;//異步加載 } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } @Override protected void onDestroy() { stopCurrentMediaPlayer(); super.onDestroy(); } private void stopCurrentMediaPlayer() { if (mMediaPlayer != null) { mMediaPlayer.stop(); mMediaPlayer.release(); mMediaPlayer = null; } } }
new 之後是idle狀態 ,create之後是 prepared狀態。這也是為何我們在調用create之後不需要再手動調用prepare()方法去更改狀態。
第一種、第二種和第三種的區別是:
前兩種為同步方式,因為涉及到識別及解碼等IO耗時操作,容易引起主線程堵塞。第三種為異步方式,不會引發此問題,推薦此方式。
用了微信sdk各種痛苦,感覺比qq sdk調用麻煩多了,回調過於麻煩,還必須要在指定包名下的actvity進行回調,所以我在這裡寫一篇博客,有這個需求的朋友可以借鑒一下,
一、字符串關鍵字變色在界面顯示的時候,偶爾需要將某些字符串中特定的字符串重點標出如下圖所示:便有了下面的方法。這個方法針對於比較 固定的字符串 ,並且需要自己 計算 需要
背景我們在安卓上進行性能測試時,如果想獲取CPU以及內存等常用性能指標,linux系統自身就提供了現成的方法,谷歌官方甚至公司內部也都提供了大量功能強大的分析工具。而相比
最近做的項目中,遇到個很棘手的問題: 客戶給我的數據是有限制的,因此,在返回某條具體頁面內容的時候,他只能給我一個html片段,裡面包含 文字,圖片以及附件的下載地址。如