MediaPlayer可以播放音频和视频,另外也可以通过VideoView来播放视频,虽然VideoView比MediaPlayer简单易用,但定制性不如用MediaPlayer,要视情况选择了。MediaPlayer播放音频比较简单,但是要播放视频就需要SurfaceView。SurfaceView比普通的自定义View更有绘图上的优势,它支持完全的OpenGL ES库。
迷你音乐播放器
/Chapter11_Media_MiniPlayer/src/com/amaker/test/MainActivity.java
- 代码
- package com.amaker.test;
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.media.MediaPlayer;
- import android.os.Bundle;
- import android.view.View;
- import android.widget.ImageButton;
- public class MainActivity extends Activity implements MediaPlayer.OnCompletionListener {
- private ImageButton play,pause,stop;
- private MediaPlayer mp;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- play = (ImageButton)findViewById(R.id.play);
- pause = (ImageButton)findViewById(R.id.pause);
- stop = (ImageButton)findViewById(R.id.stop);
- play.setOnClickListener(new View.OnClickListener() {
- public void onClick(View view) {
- play();
- }
- });
- pause.setOnClickListener(new View.OnClickListener() {
- public void onClick(View view) {
- pause();
- }
- });
- stop.setOnClickListener(new View.OnClickListener() {
- public void onClick(View view) {
- stop();
- }
- });
- setup();
- }
- @Override
- public void onDestroy() {
- super.onDestroy();
- if (stop.isEnabled()) {
- stop();
- }
- }
- public void onCompletion(MediaPlayer mp) {
- stop();
- }
- private void play() {
- mp.start();
- play.setEnabled(false);
- pause.setEnabled(true);
- stop.setEnabled(true);
- }
- private void stop() {
- mp.stop();
- pause.setEnabled(false);
- stop.setEnabled(false);
- try {
- mp.prepare();
- mp.seekTo(0);
- play.setEnabled(true);
- }
- catch (Throwable t) {
- error(t);
- }
- }
- private void pause() {
- mp.pause();
- play.setEnabled(true);
- pause.setEnabled(false);
- stop.setEnabled(true);
- }
- private void loadClip() {
- try {
- mp=MediaPlayer.create(this, R.raw.test);
- mp.setOnCompletionListener(this);
- }
- catch (Throwable t) {
- error(t);
- }
- }
- private void setup() {
- loadClip();
- play.setEnabled(true);
- pause.setEnabled(false);
- stop.setEnabled(false);
- }
- private void error(Throwable t) {
- AlertDialog.Builder builder=new AlertDialog.Builder(this);
- builder
- .setTitle("报错啦!")
- .setMessage(t.toString())
- .setPositiveButton("确定", null)
- .show();
- }
- }
/Chapter11_Media_MiniPlayer/res/layout/main.xml
- 代码
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical" android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <TextView
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:text="迷你音乐播放器" />
- <LinearLayout
- android:orientation="horizontal" android:layout_width="fill_parent"
- android:layout_height="fill_parent">
- <ImageButton
- android:id="@+id/play"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/play"
- />
- <ImageButton
- android:id="@+id/pause"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/pause"
- />
- <ImageButton
- android:id="@+id/stop"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:src="@drawable/stop"
- />
- </LinearLayout>
- </LinearLayout>
/Chapter11_Media_MiniPlayer/AndroidManifest.xml
- 代码
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.amaker.test"
- android:versionCode="1"
- android:versionName="1.0">
- <application android:icon="@drawable/icon" android:label="@string/app_name">
- <activity android:name=".MainActivity"
- android:label="@string/app_name">
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- </application>
- <uses-sdk android:minSdkVersion="3" />
- </manifest>
本文转自linzheng 51CTO博客,原文链接:http://blog.51cto.com/linzheng/1081707