編輯:關於android開發
import java.io.IOException;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.TextView;
import com.google.Main;
import com.google.R;
public class IndexActivity extends Main {
/** 日志TAG */
private static final String TAG = ">>>>>>>> IndexActivity.java <<<<<<<";
/** 控制按鈕 */
private ImageButton mBt_play, mBt_pause ,mBt_stop;
/** 提示消息 */
private TextView mTextView;
/** 媒體控制類 */
private MediaPlayer mMediaPlayer;
/** 是否是暫停flag */
private boolean mIsPaused = false;
@Override
public void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.media);
setUI();
setAction();
}
/** 獲取控件 */
private void setUI(){
mBt_pause = (ImageButton) findViewById(R.id.myButton3);
mBt_play = (ImageButton) findViewById(R.id.myButton1);
mBt_stop = (ImageButton) findViewById(R.id.myButton2);
mTextView = (TextView) findViewById(R.id.myTextView1);
setButtonEnabled(true, false, false);
}
/** 添加事件處理 */
private void setAction(){
mMediaPlayer = new MediaPlayer();
//讀取raw文件夾下的mp3文件
mMediaPlayer = MediaPlayer.create(this, R.raw.u01_2);
/* * 讀取其他文件夾下的文件使用方式
* mMediaPlayer.setDataSource(filePath)
* 來播放遠程或uri文件
*/
setListener();
}
/** * 監聽按鈕事件
*/
private void setListener(){
mBt_pause.setOnClickListener(listener);
mBt_play.setOnClickListener(listener);
mBt_stop.setOnClickListener(listener);
setMediaListener(mMediaPlayer);
}
/* * 設置media的播放完成時,釋放資源
*/
private void setMediaListener(MediaPlayer mediaPlayer){
//設置media播放完成時,釋放資源
mediaPlayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
/** 解除資源與mediaplayer之間的關系,讓資源可以被其他程序使用 */
try {
mMediaPlayer.release();
mTextView.setText(R.string.str_OnCompletionListener);
setButtonEnabled(true, false, false);
} catch (Exception e) {
Log.i(TAG, "str_OnCompletionListener is errror!!!");
}
}
});
/** 重寫錯誤事件 */
mediaPlayer.setOnErrorListener(new OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
// TODO Auto-generated method stub
try {
/** 發生錯誤是也解除資源與mediaplayer之間的關系,讓資源可以被其他程序使用 */
mMediaPlayer.release();
mTextView.setText(R.string.str_OnErrorListener);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
});
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
try {
/** 在主程序暫停時,解除mediaplayer與資源之間的賦值關系 */
mMediaPlayer.release();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
super.onPause();
}
/** 監聽按鈕事件 */
private OnClickListener listener = new OnClickListener() {
@Override
public void onClick(View v) {
switch (v.getId())
{
//播放按鈕
case R.id.myButton1:
try {
if(mMediaPlayer != null)
{
mMediaPlayer.stop();
}
else {
mMediaPlayer = new MediaPlayer();
mMediaPlayer = MediaPlayer.create(IndexActivity.this,R.raw.u01_2);
}
/* * 在mediaPlayer取得播放資源和stop()之後
* 要准備playback(回放,重放)的狀態前一定要mediaPlayer.prepare();
*/
mMediaPlayer.prepare();
mMediaPlayer.start();
mTextView.setText(R.string.str_start);//顯示播放信息
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// mIsPaused = false;
//設置可以使用的按鈕
setButtonEnabled(false, true, true);
break;
//停止按鈕
case R.id.myButton2:
try {
if(mMediaPlayer!= null)
{
mMediaPlayer.stop();
mTextView.setText(R.string.str_close);
}
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
setButtonEnabled(true, false, false);
break;
//暫停按鈕
case R.id.myButton3:
try {
if(mMediaPlayer != null)
{
if(mIsPaused == false)//要暫停當前的音樂
{
Log.i(TAG, "mIsPaused false");
mMediaPlayer.pause();
mIsPaused = true;//設置播放flag為true
mTextView.setText(R.string.str_pause);
setButtonEnabled(true, false, true);
}
else if( mIsPaused == true)//回放
{
Log.i(TAG, "mIsPaused true");
mMediaPlayer.seekTo(80000);
mIsPaused = false;
mTextView.setText(R.string.str_start);
setButtonEnabled(false, true, true);
}
}
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
break;
default:
break;
}
}
};
/**
* 設置按鈕是否可用
* @param enabled1 mBt_play
* @param enabled2 mBt_pause
* @param enabled3 mBt_stop
*/
private void setButtonEnabled(boolean enabled1,boolean enabled2,boolean enabled3){
mBt_play.setEnabled(enabled1);
mBt_pause.setEnabled(enabled2);
mBt_stop.setEnabled(enabled3);
}
}
階段一:用Handler和Message實現計時效果及其中一些疑問,handlermessage“階段一”是指我第一次系統地學習Android開發
Android 在內部存儲讀寫文件,android讀寫文件讀寫操作* Ram內存:運行內存,相當於電腦的內存* Rom內存:內部存儲空間,相當於電腦的硬盤* sd卡:外部
Android設計模式之一個例子讓你徹底明白裝飾者模式(Decorator Pattern) 導讀 這篇文章中我不會使用概念性文字來說明裝飾者模式,因為通常概念性的問題都
Afinal,afinal框架1.注解功能 1)繼承:FinalActivity ( 需要復制 afinal_0.5.1_bin.jar到lib下) 2)@Vi