android播放器

1.Mp3Player.java  文件


package com.jacky.multimedia;


import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;


import android.app.ListActivity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Handler;
import android.view.KeyEvent;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;


public class Mp3Player extends ListActivity {
/** Called when the activity is first created. */
/* 定义5个图像按钮 */
private ImageButton    mFrontImageButton    = null;
private ImageButton    mStartImageButton    = null;
private ImageButton    mPauseImageButton    = null;
private ImageButton    mStopImageButton    = null;
private ImageButton    mNextImageButton    = null;


/*定义进度handler,显示百分比进度*/
Handler mPercentHandler = new Handler();


/*定义拖动条*/
private SeekBar     mSeekBar=null;


/*定义显示文本框*/
private TextView curProgressText=null;
private TextView curtimeAndTotaltime=null;


/* 定于一个多媒体对象*/
public MediaPlayer    mMediaPlayer        = null;


/*定于一个数据播放列表,用来存放从指定文件中搜索到的文件*/
private List<String> mMusicList = new ArrayList<String>();


/* 定义在播放列表中的当前选择项 */
private int currentListItme = 0;


/*定义要播放的文件夹路径*/
private static final String MUSIC_PATH = new String("/mnt/sdcard/");


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/* 更新播放列表*/
musicList();
/*初始化多媒体对象*/
mMediaPlayer        = new MediaPlayer();


/*初始化图像按钮*/
mFrontImageButton = (ImageButton) findViewById(R.id.LastImageButton); 
mStopImageButton =  (ImageButton) findViewById(R.id.StopImageButton);
mStartImageButton = (ImageButton) findViewById(R.id.StartImageButton); 
mPauseImageButton = (ImageButton) findViewById(R.id.PauseImageButton);
mNextImageButton = (ImageButton) findViewById(R.id.NextImageButton); 


/*初始化拖动条和当前进度显示值*/
mSeekBar=(SeekBar)findViewById(R.id.SeekBar01);
curProgressText=(TextView)findViewById(R.id.currentProgress);
curtimeAndTotaltime=(TextView)findViewById(R.id.curtimeandtotaltime);


/*监听停止按钮*/
mStopImageButton.setOnClickListener(new ImageButton.OnClickListener() 
{
@Override
public void onClick(View v)
{
/*判断是否正在播放歌曲*/
if (mMediaPlayer.isPlaying())
{
/*如果在播放歌曲时,按下开始按钮,则重开开始播放*/
mMediaPlayer.reset();
}
}
}); 


/*监听开始按钮*/
mStartImageButton.setOnClickListener(new ImageButton.OnClickListener() 
{
@Override
public void onClick(View v)
{   /*播放当前选择歌曲,通过listView列表中onListItemClick方法得到选择的时第几项*/
playMusic(MUSIC_PATH + mMusicList.get(currentListItme));
/*开始播放歌曲时,同步进行更新拖动条进度*/
startSeekBarUpdate();
}    
});  


/*监听暂停按钮*/
mPauseImageButton.setOnClickListener(new ImageButton.OnClickListener() 
{
public void onClick(View view)
{
if (mMediaPlayer.isPlaying())
{
/*如果有播放歌曲,暂停*/
mMediaPlayer.pause();
}
else 
{
/*如果没有播放歌曲,则开始播放*/
mMediaPlayer.start();
}
}
});


/*监听下一首按钮*/
mNextImageButton.setOnClickListener(new ImageButton.OnClickListener() 
{
@Override
public void onClick(View arg0)
{   
nextMusic();
}
});
/*监听上一首按钮*/
mFrontImageButton.setOnClickListener(new ImageButton.OnClickListener() 
{
@Override
public void onClick(View arg0)
{
FrontMusic();
}
});


/*监听拖动条*/
mSeekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
{                                        


public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
// TODO Auto-generated method stub
/*如果拖动进度发生改变,则显示当前进度值*/
curProgressText.setText("当前进度: "+progress);    
}


@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
curProgressText.setText("拖动中...");
}


@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// TODO Auto-generated method stub
int dest = seekBar.getProgress();    
int mMax = mMediaPlayer.getDuration();
int sMax = mSeekBar.getMax();


mMediaPlayer.seekTo(mMax*dest/sMax);


}
}
);






}


/*按键处理时间,当按下返回按键时的处理方法*/
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if ( keyCode ==  KeyEvent.KEYCODE_BACK)
{
mMediaPlayer.stop();
mMediaPlayer.release();
this.finish();
return true;
}
return super.onKeyDown(keyCode, event);
}


/*ListView选择项监听方法,即当前鼠标在列表中选择的第几项*/
protected void onListItemClick(ListView l, View v, int position, long id)
{
currentListItme = position;
playMusic(MUSIC_PATH + mMusicList.get(position));
}




/*更新播放列表*/
public void musicList()
{
/*从指定的路径中读取文件,并与播放列表关联*/
File home = new File(MUSIC_PATH);
/*读取指定类型的文件,在本程序,指定播放类型为mp3*/
if (home.listFiles(new MusicFilter()).length > 0)
{
/*读取文件*/
for (File file : home.listFiles(new MusicFilter()))
{
mMusicList.add(file.getName());
}
/*播放文件与播放列表关联*/
ArrayAdapter<String> musicList = new ArrayAdapter<String>(Mp3Player.this,R.layout.musicitme, mMusicList);
setListAdapter(musicList);
}
}
/*播放指定路径中的音乐*/
private void playMusic(String path)
{
try
{
/* 重置多媒体 */
mMediaPlayer.reset();
/*读取mp3文件*/
mMediaPlayer.setDataSource(path);
/*准备播放*/
mMediaPlayer.prepare();
/*开始播放*/
mMediaPlayer.start();
/*监听播放是否完成*/
mMediaPlayer.setOnCompletionListener(new OnCompletionListener() 
{
public void onCompletion(MediaPlayer arg0)
{
/*播放完当前歌曲,自动播放下一首*/
nextMusic();
}
});
}catch (IOException e){}
}


/*播放下一首*/
private void nextMusic()
{
if (++currentListItme >= mMusicList.size())
{
currentListItme = 0;
}
else
{
playMusic(MUSIC_PATH + mMusicList.get(currentListItme));
}
}






/*播放上一首歌曲*/
private void FrontMusic()
{
if (--currentListItme >= 0)
{
currentListItme = 0;
}
else
{
playMusic(MUSIC_PATH + mMusicList.get(currentListItme));
}
}


/*更新拖动条进度*/


public void startSeekBarUpdate()
{
mPercentHandler.post(start);
}


Runnable start=new Runnable(){


@Override
public void run() {
// TODO Auto-generated method stub
mPercentHandler.post(updatesb);
//用一个handler更新SeekBar
}


};


Runnable updatesb =new Runnable(){


@Override
public void run() {
// TODO Auto-generated method stub
int position = mMediaPlayer.getCurrentPosition();               
int mMax = mMediaPlayer.getDuration();
int sMax = mSeekBar.getMax();             
mSeekBar.setProgress(position*sMax/mMax);
curtimeAndTotaltime.setText("当前播放时间: "+position/1000+"秒"+"\n歌曲总时间: "+mMax/1000+"秒");
mPercentHandler.postDelayed(updatesb, 1000);
//每秒钟更新一次
}


};


}


/*播放文件选择类*/
class MusicFilter implements FilenameFilter
{
public boolean accept(File dir, String name)
{
/*指定扩展名类型*/
return (name.endsWith(".mp3"));
}

}


2.main.xls文件


<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<ListView 
android:id="@id/android:list"  
android:layout_width="fill_parent" 
android:layout_height="fill_parent"
android:layout_weight="1"
android:drawSelectorOnTop="false"/>
<ImageButton
android:id="@+id/LastImageButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"  
android:layout_x="10px"
android:layout_y="70px"
android:src="@drawable/last"  
/>
<ImageButton
android:id="@+id/StopImageButton" 
android:layout_height="wrap_content"  
android:layout_width="wrap_content"
android:layout_x="70px"
android:layout_y="70px"
android:src="@drawable/stop" 
/>  
<ImageButton
android:id="@+id/StartImageButton" 
android:layout_height="wrap_content"  
android:layout_width="wrap_content" 
android:layout_x="130px"
android:layout_y="70px"
android:src="@drawable/start" 
/>
<ImageButton
android:id="@+id/PauseImageButton" 
android:layout_height="wrap_content"  
android:layout_width="wrap_content" 
android:layout_x="190px"
android:layout_y="70px" 
android:src="@drawable/pause" 
/>  
<ImageButton
android:id="@+id/NextImageButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content" 
android:layout_x="250px"
android:layout_y="70px"
android:src="@drawable/next"  
/>
<SeekBar android:id="@+id/SeekBar01" 
android:layout_height="wrap_content" 
android:layout_x="0dp" 
android:layout_y="200dp" 
android:layout_width="fill_parent" 
android:max="100" 
android:progress="0" 
android:secondaryProgress="50" 
android:visibility="visible"></SeekBar>


<TextView android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_y="250dp" android:id="@+id/currentProgress"></TextView>


<TextView android:layout_height="wrap_content" android:layout_width="fill_parent" android:layout_y="300dp" android:id="@+id/curtimeandtotaltime"></TextView>
</AbsoluteLayout>


3.musictime.xls


<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/TextView01"
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="@string/hello"/>


4.AndroidManifest.xls


<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.jacky.multimedia"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Mp3Player"
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> 


以上是全部代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Android播放器源码是针对Android平台上播放音频和视频文件的程序代码。它是一个完整的应用程序,具有播放、暂停、停止、快进、快退等基本功能。源码通常包括了音视频的解码、渲染、音量控制、进度控制等功能的实现。 在Android播放器源码中常见的技术包括使用MediaPlayer类进行音视频文件的播放,使用SurfaceView或TextureView进行视频的渲染,使用SeekBar控件进行进度控制,使用MediaController控件显示播放控制界面等。 Android播放器源码还可以扩展更多的功能,如自定义播放界面、添加播放列表、添加字幕功能、给视频添加滤镜效果等。开发者可以根据自己的需求,对源码进行修改和扩展,以满足不同的播放需求。 当使用Android播放器源码进行开发时,需要熟悉Android开发相关知识,如Activity生命周期、布局文件的编写、权限管理等。此外,对于音视频解码和渲染的原理和技术也需要有一定的了解。 总之,Android播放器源码提供了一个基础的音视频播放功能的框架,开发者可以根据自己的需求进行修改和扩展,实现更加丰富多样的播放器功能。 ### 回答2: Android播放器源码是指用于在Android设备上播放音频和视频的程序代码。Android系统提供了MediaPlayer和ExoPlayer两种播放器API,开发者可以根据实际需求选择合适的播放器播放器源码通常包含以下几个关键部分: 1. 用户界面(UI):播放器通常提供控制按钮、进度条、音量调节器和全屏模式等交互元素,使用户可以方便地操作播放器。 2. 数据源管理:播放器需要处理不同类型的音频和视频文件,并提供从本地文件、网络流或平台特定资源获取数据的功能。 3. 缓冲和解码:播放器需要将音频和视频数据从文件或网络中读取到设备内存,并进行解码以获取原始音视频流。 4. 播放控制:播放器需要支持播放、暂停、停止、快进、快退和重复播放等基本控制操作。 5. 错误处理和异常处理:播放器需要在出现错误或异常情况时及时进行处理,并向用户提供相应的提示或操作建议。 6. 外部资源管理:播放器可能需要管理与播放相关的外部资源,例如字幕、封面图像和背景音乐等。 使用Android播放器源码,开发者可以根据自己的需求进行二次开发,定制功能和界面,实现各种不同类型的音视频播放器。同时,开发者还可以针对自己的需求进行性能优化,提供更好的播放体验。 总之,Android播放器源码是一种用于实现音视频播放功能的程序代码,开发者可以根据实际需求进行二次开发和定制,从而实现各种不同类型的播放器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值