編輯:關於Android編程
本文將的是一個在線音樂播放器,文中對相應操作做了比較詳細的講解,已達到實現效果,並了解播放器原理的目的。
源代碼:
布局文件:
activity_audio_httpplayer:
package com.multimediademo7audiohttpplayer;
import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnBufferingUpdateListener;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaPlayer.OnErrorListener;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
/**
* 在線音樂播放Demo。
*
*/
public class AudioHTTPPLayer extends Activity implements OnCompletionListener,
OnErrorListener, OnBufferingUpdateListener, OnPreparedListener,
OnClickListener {
private MediaPlayer mediaPlayer;
private Button startButton, stopButton;
private TextView statusTextView, bufferValueTextView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_audio_httpplayer);
init();
}
/**
* 實例化組件。
*/
private void init() {
startButton = (Button) findViewById(R.id.startButton);
stopButton = (Button) findViewById(R.id.stopButton);
statusTextView = (TextView) findViewById(R.id.statusDisplayTextView);
bufferValueTextView = (TextView) findViewById(R.id.bufferValueTextView);
startButton.setOnClickListener(this);
stopButton.setOnClickListener(this);
statusTextView.setText("onCreate");
mediaPlayer = new MediaPlayer();
mediaPlayer.setOnCompletionListener(this);
mediaPlayer.setOnErrorListener(this);
mediaPlayer.setOnBufferingUpdateListener(this);
mediaPlayer.setOnPreparedListener(this);
statusTextView.setText("MediaPlayer created");
try {
/**
* 調用setDataSource();方法,並傳入想要播放的音頻文件的HTTP位置。
*/
mediaPlayer
.setDataSource("http://zhangmenshiting.baidu.com/data2/music/36865035/17765263198000128.mp3?xcode=81bb2569613f49564c53ca228d87e526d7ed2c9c576c829e");
} catch (Exception e) {
e.printStackTrace();
}
statusTextView.setText("setDataSource done");
statusTextView.setText("calling prepareAsync");
/**
* 調用prepareAsync方法,它將在後台開始緩沖音頻文件並返回。
*/
mediaPlayer.prepareAsync();
}
/**
* 當MediaPlayer正在緩沖時,將調用該Activity的onBufferingUpdate方法。
*/
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
bufferValueTextView.setText("" + percent + "%");
}
/**
* 當完成prepareAsync方法時,將調用onPrepared方法,表明音頻准備播放。
*/
@Override
public void onPrepared(MediaPlayer mp) {
statusTextView.setText("onPrepared called");
startButton.setEnabled(true);
}
/**
* 當MediaPlayer完成播放音頻文件時,將調用onCompletion方法。
* 此時設置“播放”按鈕可點擊,“暫停”按鈕不看點擊(表示可以再次播放)。
*/
@Override
public void onCompletion(MediaPlayer mp) {
statusTextView.setText("onCompletion called");
startButton.setEnabled(true);
stopButton.setEnabled(false);
}
/**
* 當按手機上的返回鍵的時候,會自動調用系統的onKeyDown方法,而onKeyDown方法又會調用onDestroy()方法銷毀該Activity
* , 此時如果onDestroy()方法不重寫,那麼正在播放的音樂是不會停止的(大家可以試一下),所以這時候要重寫onDestroy()方法,
* 在該方法中 加入mediaPlayer.stop()方法,表示按返回鍵的時候,會調用mediaPlayer對象的stop方法,從而停止音樂的播放。
*/
@Override
protected void onDestroy() {
super.onDestroy();
mediaPlayer.stop();
Log.d("zhongyao", "onDestroy()");
}
/**
* 如果MediaPlayer出現錯誤,將調用onError方法。
*/
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
statusTextView.setText("onError called");
switch (what) {
case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK:
statusTextView
.setText("MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK"
+ extra);
break;
case MediaPlayer.MEDIA_ERROR_SERVER_DIED:
statusTextView.setText("MEDIA_ERROR_SERVER_DIED" + extra);
break;
case MediaPlayer.MEDIA_ERROR_UNKNOWN:
statusTextView.setText("MEDIA_ERROR_UNKNOWN");
break;
default:
break;
}
return false;
}
/**
* 當按下播放按鈕時,調用MediaPlayer的start方法; 當按下暫停按鈕時,將調用MediaPlayer的Pause方法。
*/
@Override
public void onClick(View v) {
if (v == startButton) {
mediaPlayer.start();
statusTextView.setText("start called");
startButton.setEnabled(false);
stopButton.setEnabled(true);
} else if (v == stopButton) {
mediaPlayer.pause();
statusTextView.setText("pause called");
startButton.setEnabled(true);
stopButton.setEnabled(false);
}
}
}
點擊下載源碼
Android使用自定義alertdialog實現確認退出按鈕
有時候我們需要在游戲或應用中用一些符合我們樣式的提示框(AlertDialog),以下是我在開發一個小游戲中總結出來的.希望對大家有用.先上效果圖:下面是用到的背景圖或按
Android_ConnectivityManager連接管理
ConnectivityManagerConnectivityManager作為安卓網絡連接管理類,主要功能如下:1. 通知應用網絡狀態的改變,發送廣播 ACTION:C
Android仿XListView支持下拉刷新和上劃加載更多的自定義RecyclerView
首先給大家展示下效果圖,感覺還不錯,請繼續往下閱讀:下拉刷新: 上劃加載 &nbs
Android 多渠道打包
配置AndroidMainfest.xml以友盟渠道為例,渠道信息一般都是寫在 AndroidManifest.xml文件中,代碼大約如下:如果不使用多渠道打包方法,那就