編輯:關於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耗時操作,容易引起主線程堵塞。第三種為異步方式,不會引發此問題,推薦此方式。
Android調用微信登陸、分享、支付
用了微信sdk各種痛苦,感覺比qq sdk調用麻煩多了,回調過於麻煩,還必須要在指定包名下的actvity進行回調,所以我在這裡寫一篇博客,有這個需求的朋友可以借鑒一下,
Android實現TextView字符串關鍵字變色的方法
一、字符串關鍵字變色在界面顯示的時候,偶爾需要將某些字符串中特定的字符串重點標出如下圖所示:便有了下面的方法。這個方法針對於比較 固定的字符串 ,並且需要自己 計算 需要
安卓專項測試之GPU測試探索
背景我們在安卓上進行性能測試時,如果想獲取CPU以及內存等常用性能指標,linux系統自身就提供了現成的方法,谷歌官方甚至公司內部也都提供了大量功能強大的分析工具。而相比
Android中WebView的相關使用
最近做的項目中,遇到個很棘手的問題: 客戶給我的數據是有限制的,因此,在返回某條具體頁面內容的時候,他只能給我一個html片段,裡面包含 文字,圖片以及附件的下載地址。如