Android应用开发--MP3简单音乐播放器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Android应用开发--MP3简单音乐播放器
点击列表会进入播放的Activity,在这个Activity会接收到从前面的Activity传来的数据,在通过这些数据来启动服务来播放音乐,整个过程很简单,需要注意的是我们要接收的数据是哪些内容,还有我们向Service要传什么样的数据,这是根据自己的开发思路和需求来决定的,等一下你们会看到小鬼到底往Service传了些什么东西,然而这些数据到底起什么作用,需要慢慢去体会,因为这是需要一点一点去调试的。

好了,下面贴一下整个Activity的实现代码,主要是播放的各种状态的实现,因为这个音乐播放器并没有完全开发完,所以朋友们需要弄清楚这一点。

如果对代码的实现有不清楚的,可以给小鬼留言,小鬼有空一定给大家解答。

效果如下:
代码如下:
package com.anjovo.as.chapter10.exam01;
import java.io.IOException;
import android.media.AudioManager;
import android.media.MediaPlayer;
import .Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo; import android.view.Menu;
import android.view.MenuItem;
import android.view.SubMenu;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MusicPlayerActivity extends Activity {
protected static final int REQUEST_CODE = 1;
private Button btnPlay,btnPause,baStop,back;
private ImageView image;
private TextView text;
private MediaPlayer player;
int position = 0;
//声明一个变量判断是否为播放,默认为false
private boolean isPaused = false,Media=false;
@Override
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
setContentView(yout.activity_music_player);
btnPlay = (Button) findViewById(R.id.bt_play);
btnPause = (Button) findViewById(R.id.bt_pause);
baStop = (Button) findViewById(R.id.bt_stop);
back = (Button) findViewById(R.id.bt_back);
image = (ImageView)
findViewById(R.drawable.ic_launcher);
text = (TextView) findViewById(R.id.text);
image = (ImageView) findViewById(R.drawable.fengcun);
registerForContextMenu(baStop);//注册,让这个bastop将会启用上下文菜单
text.setText("歌词下载错误!");
final Intent serintent = new
Intent(this,newActivity.class);
btnPause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
startActivityForResult(serintent,REQUEST_CODE);
}
});
back.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
finish();
if(Media==true){
player.stop();
player.release();
}
}
});
}
public void BlooeanMedia(){
if(Media==true){
player.release();
}
}
public void Player(MediaPlayer player){ try {
if(player!=null){
player.stop();
}
player.prepare();
player.start();
isPaused = true;
Media=true;
Toast.makeText(this, "音乐播放中...", Toast.LENGTH_LONG).show();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public boolean onContextItemSelected(MenuItem item) { // TODO Auto-generated method stub
switch(item.getItemId()){
case 1:
/*
* 用户点击了Id为“1”的子项,在这里编写处理代码
*/
BlooeanMedia();
player = MediaPlayer.create(this,
R.raw.wintersecret);
MediaPlayer(player);
Player(player);
text.setText("周传雄-冬天的秘密...");
break;
case 2:
/*
* 用户点击了Id为“2”的子项,在这里编写处理代码
*/
BlooeanMedia();
player = MediaPlayer.create(this, R.raw.after);
MediaPlayer(player);
Player(player);
text.setText("庄心研-以后的以后...");
break;
case 3:
/*
* 用户点击了Id为“2”的子项,在这里编写处理代码
*/
BlooeanMedia();
player = MediaPlayer.create(this, R.raw.baby);
MediaPlayer(player);
Player(player);
text.setText("张悬-宝贝...");
break;
case 4:
/*
* 用户点击了Id为“2”的子项,在这里编写处理代码
*/
BlooeanMedia();
player = MediaPlayer.create(this, R.raw.lovegirl);
MediaPlayer(player);
Player(player);
text.setText("张赫宣-你是我心爱的姑娘...");
break;
case 5:
/*
* 用户点击了Id为“2”的子项,在这里编写处理代码
*/
Toast.makeText(this, "Item 5被选择",
Toast.LENGTH_LONG).show();
break;
case 6:
/*
* 用户点击了Id为“2”的子项,在这里编写处理代码
*/
Toast.makeText(this, "Item 6被选择",
Toast.LENGTH_LONG).show();
break;
case 7:
/*
* 用户点击了Id为“2”的子项,在这里编写处理代码
*/
Toast.makeText(this, "Item 7被选择",
Toast.LENGTH_LONG).show();
break;
case 8:
/*
* 用户点击了Id为“2”的子项,在这里编写处理代码
*/
Toast.makeText(this, "Item 8被选择",
Toast.LENGTH_LONG).show();
break;
case 9:
/*
* 用户点击了Id为“2”的子项,在这里编写处理代码
*/
Toast.makeText(this, "Item 9被选择",
Toast.LENGTH_LONG).show();
break;
case 10:
/*
* 用户点击了Id为“2”的子项,在这里编写处理代码
*/
Toast.makeText(this, "Item 10被选择",
Toast.LENGTH_LONG).show();
break;
}
return super.onOptionsItemSelected(item);
}
private void MediaPlayer(final MediaPlayer player) { // TODO Auto-generated method stub
//增加播放音乐按钮的事件
btnPlay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try {
if(player!=null){
if(isPaused==false){
player.start();
isPaused=true;
Toast.makeText(getApplicationContext(), "音乐播放中...", Toast.LENGTH_LONG).show();
}else if(isPaused==true){
player.pause();//暂停
isPaused=false;
Toast.makeText(getApplicationContext(), "音乐暂停中...", Toast.LENGTH_LONG).show();
}
}
player.prepare();//同步地准备播放或回放
player.start();//开始播放
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
//播放完毕
player.setOnCompletionListener(new
MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer arg0) {
// TODO Auto-generated method stub
try{
//释放dtmimi.mp3这个资源,让它可被其它播放器使用
player.release();//释放MediaPlayer
Toast.makeText(getApplicationContext(), "音乐播放结束!", Toast.LENGTH_LONG).show();
text.setText("");
}catch(Exception e){
Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
}
});
//播放出错的处理
player.setOnErrorListener(new
MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
try{
//发生错误时也释放资源
player.release();
Toast.makeText(getApplicationContext(), "播放发生异常!", Toast.LENGTH_LONG).show();
}catch(Exception e){
Toast.makeText(getApplicationContext(),
e.toString(), Toast.LENGTH_LONG).show();
e.printStackTrace();
}
return false;
}
});
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(Menu.NONE, 1, Menu.NONE, "周传雄-冬天的秘密");
menu.add(Menu.NONE, 2, Menu.NONE, "庄心研-以后的以后");
menu.add(Menu.NONE, 3, Menu.NONE, "张悬-宝贝");
menu.add(Menu.NONE, 4, Menu.NONE, "张赫宣-你是我心爱的姑娘");
menu.add(Menu.NONE, 5, Menu.NONE, R.string.menu_item5);
//将Item6设置为子菜单
SubMenu subMenu = menu.addSubMenu(Menu.NONE, 6, Menu.NONE, R.string.menu_item6);
subMenu.setHeaderIcon(R.drawable.ic_launcher);
subMenu.setIcon(R.drawable.ic_launcher);
subMenu.setHeaderTitle("子菜单");
subMenu.add(Menu.NONE, 7, Menu.NONE,
R.string.menu_item7);
subMenu.add(Menu.NONE, 8, Menu.NONE,
R.string.menu_item8);
subMenu.add(Menu.NONE, 9, Menu.NONE,
R.string.menu_item9);
subMenu.add(Menu.NONE, 10, Menu.NONE,
R.string.menu_item10);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// TODO Auto-generated method stub
super.onActivityResult(requestCode, resultCode, data);
if(requestCode==REQUEST_CODE&&resultCode==RESULT_OK){ if(data!=null){//通过data参数处理返回信息
String info = data.getData().toString();
Uri myUri = Uri.parse(info);//将传回来的路径放在myUri中
BlooeanMedia();
player = new MediaPlayer();
MediaPlayer(player);
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
try {
player.setDataSource(getApplicationContext(),myUri);//按地址播放
player.prepare();
player.start();
isPaused = true;
Media=true;
Toast.makeText(this, "音乐播放中...", Toast.LENGTH_LONG).show();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{
Toast.makeText(this, "无返回信息",
Toast.LENGTH_SHORT).show();
}
}
}
}
package com.anjovo.as.chapter10.exam01;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Intent;
import .Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
/**
* 使用一个包含String的List作为ListView的数据源,由于要在匿名内部类的方法中
* 使用它,故将其定义为类的属性
*/
public class newActivity extends Activity{
private List<String> dataList;
private List<String> datauri;
private String m_path;
@Override
protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(yout.array_adapter_acyivity);
ListView list = (ListView) findViewById(R.id.list);
dataList = new ArrayList<String>();
datauri = new ArrayList<String>();
m_path = new String("mnt/sdcard/");
search(m_path, ".mp3", dataList,datauri);
//定义一个ArrayAdapter,将数据源——dataList中的内容添加到这个ArrayAdapter
//中,第二个参数指每一项将使用的界面布局
final ArrayAdapter<String> adapter = new
ArrayAdapter<String>(
this, yout.array_adapter_item, dataList);
list.setAdapter(adapter);//将ArrayAdapter填充到ListView
//处理用户单击选择的事件
list.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// TODO Auto-generated method stub
Intent intent = new Intent();
String url = datauri.get(position);
intent.setData(Uri.parse(url));
setResult(RESULT_OK, intent);
finish();
}
});
//处理用户长按事件
list.setOnItemLongClickListener(new
AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view,
int position, long id) {
// TODO Auto-generated method stub
Toast.makeText(getApplicationContext(),dataList.get(posit ion)+"删除成功!", Toast.LENGTH_LONG).show();
//用户长按一项时,删除这一项内容
dataList.remove(position);
//通知Adapter的观察者数据源改变了,界面内容也得发生改变
adapter.notifyDataSetChanged();
return true; //返回true表示长按
}
});
}
}
布局文件如下:
<RelativeLayout
xmlns:android="/apk/res/and roid"
xmlns:tools="/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margi n"
android:paddingLeft="@dimen/activity_horizontal_margi n"
android:paddingRight="@dimen/activity_horizontal_marg in"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MusicPlayerActivity">
<Button
android:id="@+id/bt_pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_marginBottom="14dp"
android:text="列表"/>
<Button
android:id="@+id/bt_play"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/bt_pause"
android:layout_alignBottom="@+id/bt_pause"
android:layout_centerHorizontal="true"
android:text="播放"/>
<Button
android:id="@+id/bt_back"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/bt_stop"
android:layout_alignParentTop="true"
android:text="返回"/>
<Button
android:id="@+id/bt_stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/bt_play"
android:layout_alignBottom="@+id/bt_play"
android:layout_toRightOf="@+id/image"
android:text="选择"/>
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/text"
android:layout_marginBottom="16dp"
android:layout_toRightOf="@+id/bt_pause"
android:src="@drawable/fengcun"/>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/bt_play"
android:layout_centerHorizontal="true"
android:layout_marginBottom="48dp"
android:text="."/> </RelativeLayout>。

相关文档
最新文档