导航:首页 > 操作系统 > android音乐播放器项目

android音乐播放器项目

发布时间:2023-09-22 10:47:09

1. 基于android音乐播放器源代码(正常播放、有列表)

package my.android.players;

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

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.TextView;

public class mainActivity extends Activity {

private List<String> myMusicList=new ArrayList<String>();
//当前播放歌曲的索引
private int currentListItem=0;
//音乐的路径
private static final String MUSIC_PATH="/sdcard/mp3";
//播放对象
private MediaPlayer myMediaPlayer;
private TextView m_TextView;
//播放按钮
private ImageButton m_start;
private ImageButton m_stop;
private ImageButton m_next;
private ImageButton m_last;
/*设定bIsPaused一开始为false */
private boolean bIsRun = false;
private boolean isplay;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main2);

myMediaPlayer=new MediaPlayer();

musicList();
m_TextView=(TextView)findViewById(R.id.mtextview);
m_start=(ImageButton)findViewById(R.id.imgbtn_start);
m_stop=(ImageButton)findViewById(R.id.imgbtn_stop);
m_next=(ImageButton)findViewById(R.id.imgbtn_next);
m_last=(ImageButton)findViewById(R.id.imgbtn_last);
listener();

Intent intent = this.getIntent();
Bundle bundle = intent.getExtras();
currentListItem = bundle.getInt("currentListItem");
isplay=bundle.getBoolean("isplay");
if(isplay==true)
{
bIsRun=false;
playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem));
}
}
//监听事件
void listener(){

//开始
m_start.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try
{
if(myMediaPlayer.isPlaying()==true)
{
myMediaPlayer.pause();
m_start.setImageResource(R.drawable.pause);
}
else
{
playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem));
}

}
catch (IllegalStateException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

}
});
//下一首
m_next.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
nextMusic();
}
});

//上一首
m_last.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

lastMusic();
}
});

//停止
m_stop.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
stopMusic();
}
});

myMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
nextMusic();
}
});
}
//播放音乐
void playMusic(String path){
try {
if(bIsRun==false)
{
myMediaPlayer.reset();
myMediaPlayer.setDataSource(path);
myMediaPlayer.prepare();
myMediaPlayer.start();
/*
* 取出歌曲名的.mp3后缀
* */
String str=(myMusicList.get(currentListItem)).toString();
System.out.println(str);
String str1[]=str.split("\\.");
System.out.println(str1[0]);
m_TextView.setText(str1[0]);
}
else
{
myMediaPlayer.start();
}
m_start.setImageResource(R.drawable.start);
bIsRun=true;
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}

//下一首
void nextMusic(){
if(++currentListItem>=myMusicList.size()){
currentListItem=0;
}
bIsRun=false;
playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem));
}

//上一首
void lastMusic(){
if(--currentListItem<0)
currentListItem=myMusicList.size()-1;
bIsRun=false;
playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem));
}
//停止
void stopMusic() {

if (myMediaPlayer.isPlaying()) {
m_start.setImageResource(R.drawable.pause);
myMediaPlayer.stop();// 停止
bIsRun=false;
}
else
playMusic(MUSIC_PATH+"/"+myMusicList.get(currentListItem));
}
//当用户返回时结束音乐并释放音乐对象
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if(keyCode==KeyEvent.KEYCODE_BACK){
new AlertDialog.Builder(mainActivity.this).setTitle("message")
.setIcon(android.R.drawable.dialog_frame)
.setMessage("你确定要离开吗?")
.setPositiveButton("确定",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
myMediaPlayer.stop();
myMediaPlayer.release();
finish();
}
}).setNegativeButton("取消",new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub

}
}).show();

}
return super.onKeyDown(keyCode, event);
}
/**
* 文件过滤器
*
* @author
*
*/
class MusicFilter implements FilenameFilter {

@Override
public boolean accept(File dir, String filename) {

return (filename.endsWith(".mp3"));
}

}
//绑定音乐
void musicList(){
try{
File home=new File(MUSIC_PATH);
if(!home.exists())
home.mkdirs();
if(home.listFiles(new MusicFilter()).length>=0){
for(File file:home.listFiles(new MusicFilter())){
myMusicList.add(file.getName().toString());
}
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}

package my.android.players;

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

import android.app.Activity;
import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.widget.AdapterView;
import android.widget.ArrayAdapter;

import android.widget.ListView;

public class Activity01 extends Activity {

//播放列表
private List<String> myMusicList=new ArrayList<String>();
//当前播放歌曲的索引
private int currentListItem;
//音乐的路径
private static final String MUSIC_PATH="/sdcard/mp3";
//播放列表
private ListView m_ListView;

private boolean isplay=true;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

m_ListView=(ListView)findViewById(R.id.lv_music);

musicList();

//当选择列表项时播放音乐
m_ListView.setOnItemClickListener(new ListView.OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
currentListItem = arg2;
Intent intent = new Intent();
Bundle mBundle=new Bundle();
mBundle.putInt("currentListItem", currentListItem);
mBundle.putBoolean("isplay", isplay);
intent.putExtras(mBundle);
intent.setClass(Activity01.this,mainActivity.class);
startActivity(intent);
finish();
}
});
}

/**
* 文件过滤器
*
* @author
*
*/
class MusicFilter implements FilenameFilter {

@Override
public boolean accept(File dir, String filename) {

return (filename.endsWith(".mp3"));
}

}

//绑定音乐
void musicList(){
try{
File home=new File(MUSIC_PATH);
if(!home.exists())
home.mkdirs();
if(home.listFiles(new MusicFilter()).length>=0){
for(File file:home.listFiles(new MusicFilter())){
myMusicList.add(file.getName().toString());
}
ArrayAdapter<String> musicList=new ArrayAdapter<String>
(Activity01.this,android.R.layout.simple_list_item_1, myMusicList);
m_ListView.setAdapter(musicList);
}
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}

2. Android要求做一个一个简易音乐播放器。用Service实现

android开发培训一个简单的Android音乐播放器
在这里主要是用两个简单的按钮实现音乐的播放和停止功能,工程的目录结构为:
同时添加一个文件夹,里面放后缀为mp3的文件就可以了。 在main配置文件主要是添加两个Button:
添加一个activity类和一个service类AndroidManifest.xml配置文件为:
创建一个MusicServiceActivity类启动service类:中网互赢 手机客户端

3. android怎样做一个音乐播放器

你好,可以参考一下
本文将引导大家做一个音乐播放器,在做这个Android开发实例的过程中,能够帮助大家进一步熟悉和掌握学过的ListView和其他一些组件。为了有更好的学习效果,其中很多功能我们手动实现,例如音乐播放的快进快退等。
http://www.jizhuomi.com/android/example/104.html

4. android音乐播放器开发问题

删除也就从你的列表中拿到指定歌曲的position 然后从数据源中移除 新建播放列表的话你可以重新new一个List 将你要放到新建播放列表中的歌曲的地址add进去不就行了么?

5. 如何开发一款音乐播放器APP

如何开发一款音乐播放器APP

你可以参考这个开源的音乐播放器ryanhoo/StylishMusicPlayer,不过可能有点难。慢慢看。初学者的话,先从模仿UI做起吧,然后再慢慢实现一点点的功能。比如做播放接口的时候,先做UI,然后做每个控制元件的点选事件,然后做播放音乐,等等。

你可以参考这个开源的音乐播放器ryanhoo/StylishMusicPlayer,不过可能有点难。慢慢看。初学者的话,先从模仿UI做起吧,然后再慢慢实现一点点的功能。

如何开发一款android本地音乐播放器

酷狗的歌词逐字匹配 是因为酷狗歌词的制作过程 你用酷狗制作过歌词吗? 如果你想做成一样的 我建议你去制作一份歌词才能明白。。。只用LRC写 即使加点或者空格什么的 也一定会影响美观 如果你根据酷狗的歌词制作步骤能写出相关演算法 那程式里的算法就好写了。。。

如何一步步设计开发一款音乐播放器App

学习app开发技术就可以

OooPlay 是一款极简音乐播放器,本文是产品原型设计培训师、OooPlay 设计者尹广磊的分享,文中详细阐述了OooPlay在产品原型设计和开发过程中的思维演化方式以及产亩橘友品心路历程,在此分享给感迅槐兴趣的读者。
先谈谈主体设计
在开始谈论如何设计出这款应用之前,先来看看OooPlay这款应用的演示视讯让大家有个直观的了解。看过视讯之后,因为布局或互动方式也许大家会觉得有一点酷的感觉,但本质上我们未不是在追求酷的感觉,而是始终在围绕功能做一款随性而紧凑的产品设计。
那下面就来还原一下,是如何一步步递进到现在的设计结果的:
首先,iPhone自带的音乐播放器不方便在列表上试听歌曲,一点选就会进入到另一个播放接口。这样想试听几首歌曲的话需要频繁点选“返回”。后来注意到有这样一款应用Panamp是在列表上直接播放的就很方便,只可惜这款应用不常用到的功能比较多,所以算不上精简和巧妙的设计导致特色不是很突出。我想从最初的角度出发如果让它能够是列表的形式并能听歌的话,只需要一个列表和播放暂停按钮就够了。就像下面的草图这样:
然而仅仅这样是不够的,因为随着列表的浏览和滚动,如何能够快速回到正在播放的歌曲上就变得重要,所以需要在列表的顶端或底端能有一个按钮,可以快速定位到正在播放的歌曲上。想到必须要有这么个东西,那么加什么元素才能显示不突兀多余,又能伍薯跟整体的简洁风格比较和谐呢?于是想到歌曲的CD画面对于反 映正在播放的歌曲是谁很重要,而且CD画面还能消除一些软体接口的单调。
另外,播放中时还应该有一些动态效果以体现出正在播放中的状态来。基于这些功能和元素的结合,想到了用CD圆盘来显示“CD画面”,用圆盘的转动来 体现出“正在播放中”,用点选圆盘的边缘来回到“正在播放的歌曲”,这样才算达到了一种“紧凑”的设计。后面就是把播放、暂停、上一首、下一首这样最常用的功能,融入到CD圆盘的旁边。如下图这样
然而,细想之下只有这些还是不够,因为搜寻歌曲虽然不常用,但是当需要用到时不能让使用者从几百首歌里找不出那首歌曲来。所以需要有搜寻功能,后面意识到还不止,还有随机、单首回圈等,那么把这些功能加在什么位置?加在顶部吗?底部已经占用比较多的高度了,加在顶部一下子就会挤压到中间内容的空间,同 时让简洁的感觉荡然无存。我就创造性的在纸上尝试着画了一个侧栏,把搜寻、随机、单首回圈放在上面。
因为觉得歌曲列表的宽度压缩一点没关系。没想到这样放的效果不错,同时这种非对称的设计让CD圆盘待在那个位置特别恰当。我不想把CD圆盘放在中间那样毫无新意的表达方式。于是有了下图:
这样基本的布局有了,然后继续去细化一些功能。我个人经常听到一首歌突然很有感觉,就想到手机里还有这个人的另外一首歌也很不错,就想去听一下。所以,需要有个功能可以通过一首歌找到这个人的全部歌曲。于是在歌曲名称的后面增加一个“小人”图示,可以搜寻这个演唱者的其它歌曲,使用搜索的方式也是为 了不额外增加接口,同时把“搜寻”这么一个不常用的功能也变得常用了。
另外,很多播放器都有了定时结束播放的功能,以便于睡觉前听着音乐入睡。我也增加了此功能,从常用的角度只保留了30分钟和60分钟两个时间档(沙漏是倒计时结束播放)。再有就是为软体的“关于”保留一个入口,还有因为我有蓝芽立体声耳机所以增加了AirPlay功能的支援(无AirPlay装置时 不出现此图示)。于是就有了下图:
其实,在只有列表的时候我就想到让音乐可以左右滑动以置顶置底了。这个是受Clear应用视讯的影响,Clear的设计方式真的带给了设计师一些新的思考方向。本质上那种重要的资讯偏靠上不重要的资讯偏靠下的内容,都可以采用这种方式处理。
我个人觉得,音乐就可以恰当的使用这种方式,那些因为心情等暂时不想听的歌曲直接右滑就可以置底,意思是“死的远远的”,那些比较关注想多了解的歌 曲就可以左滑把它置顶,这样最方便找到。这样随性的处理,就可以让上面的歌曲偏好听,下面的歌曲偏不好听。这是其它音乐播放器所做不到的,况且它使用起来是如此的简便,这也是这个播放器最大的亮点。
同时,由于把想关注的歌曲左滑置顶了,所以也不需要再保留自带播放器“播放列表”的功能了,因为接近顶端的位置就算是播放列表了。而且我总觉得过去“播放列表”的方式,把歌曲在多个列表间移来移去过于机械化,一点也不随性和简便。歌曲左右滑动见下图:
我并没有保留可以拖动歌曲排序的功能,因为单手那样操作并不容易,即便要双手来这样操作那大概也是有强迫症思维的人才会去刻意组织每一首歌的排序。“刻意”就违背我“随性”的原则,况且按住并拖动歌曲也会大大增加误操作的机率。
至此该应用主要功能的设计过程应该介绍完了,简单总结为三点:
在列表直接播放,可以快速试听歌曲。
左右滑动可以将歌曲好听与否快速分开。
点选演唱者图示可以快速检视该演唱者歌曲。
因为手机有侧键可以控制音量,所以没有在软体接口上保留音量控制。听音乐时没想到还需要进度条,所以没有进度条控制,不过跟自带播放器一样你可以按住“下一首”来快进歌曲(同时支援线控方式)。 因为OooPlay播放器只有一个主接口且全图示设计,不需要额外的翻译即可全球发行。基于全球使用者这样一个市场,无法提供比较靠谱的联网显示歌词服务。加上使用者iTunes自带的音乐多数不带歌词且无法逐句定位显示,所以综上原因我们也舍弃了显示歌词的功能,就让随性的音乐响起,不必在意他唱的每一句都 是什么。
再谈谈细节
为了把产品做到接近于完美,OooPlay极简音乐播放器还有很多细节做了精心的处理,下面列举几点(部分内容在之前文章中介绍过,已经了解的可直接跳过):
正在播放的歌曲如果右滑,那表示不想听,所以此歌曲会停止播放并置底,然后开始播放“下一首”歌曲;如果是正在播放的歌曲左滑,表示好听 或想关注,所以不能够停止播放。该歌曲需要置顶,但是该歌曲需要留在原来的位置上,因为当该首歌播放完以后需要播放下面一首歌,而不能去播放顶上的第二首歌,因为那些可能是从上听下来刚刚听过的歌曲。
左右滑动是全域性性的操作,在任何搜寻结果中左滑过的歌曲,回到所有歌曲列表时依然能够在最上面找到,不必担心只有回到那个搜寻结果才能在上面找到。
不是所有歌曲后面都显示演唱者图示,只有某演唱者在库中的歌曲数量在1首以上时才会显示,因为如果该演唱者只有一首歌曲的话,你再去搜索也没有意义了,避免你搜索完发现还是只有一首歌曲而失望。
随机播放时的算法做了特殊处理,曲库如果有10首歌以上,最下面1首歌随机时不会被播放到;如果有20首歌以上,最下面2首歌不会被播放到。以此类推最多会有30首最下面的歌随机时不会被播放到。避免你随机播放时还是会听到你最近不想听的歌曲。
列表的方式会有误操作的可能,如果你错点了一首歌曲,可以在5秒钟以内按“上一首”,就可以回到刚才听的歌曲,并且从断开的位置继续播放。5秒钟以后,说明你大概不是误操作,再按“上一首”就会正常跳到“上一首”歌曲上。
当一首歌快唱完的25秒以内,也就是歌曲 *** 基本唱完的时候,如果你按“上一首”按钮,会重新播放当天歌曲。因为当快唱完的时候你按“上一首”大概是这首歌曲听着很爽,想再来一遍。iPhone自带的播放器是开始播放3秒钟以后,按“上一首”重新播放当前歌曲。
如果你新同步了5首歌进到手机里,新同步的歌曲会排在原来所有歌曲的最上面。你新同步进来的歌曲大概就是马上想听下它们吧,所以把它们放在最上面。你原来那些歌曲的排序也都保留了,不会因为同步而让你所有歌曲重新排序。
正如你看到的,从启动画面开始我们就做了连贯的动画衔接,让每一层含义都清晰可辩。
我们不想单单为了让你看一下无用的“关于”资讯就多占用一个接口,所以在那里我们的“夜间模式”还能给你最后一层惊喜。
开发过程大致经历了以下几个阶段:
2013-01-21 受到DailyCost激发,决定要从音乐播放器角度做个产品。
2013-01-22 上午纸上完成草图,晚上制作出了最初的主原型接口。
2013-01-24 经朋友介绍找到我应用的开发者 rexshi,28日找到接口设计 soioi。
2013-03-03 过完春节并完成所有原型细节,回到北京。
2013-03-16 沟通完各项工作,开始进入开发阶段。
2013-05-15 主体开发功能完成,放出了一个开发者版本的演示视讯。
2013-05-24 释出了一个公测的预览版本。
2013-06-14 提交AppStore稽核。
2013-06-21 OooPlay稽核通过上线,当天达到付费音乐榜第7名,次日达到第3名。

没有那么复杂啊。
我在”应用之星“网站上,做了些音乐APP。
只要上传你的音讯档案,很快就能生成。
小白使用者的救星~~

找一款音乐播放器的app

酷狗音乐+虾米音乐;
网易云音乐+虾米音乐;
QQ音乐+虾米音乐
酷我音乐+虾米音乐
这样两两搭配歌曲较全,如果只选一个酷狗音乐或网易云音乐

找一款音乐播放器

你好 相对你的描述 觉得是酷狗 希望帮到你

酷狗音乐

6. android音乐播放器怎么实现用户交互

首先实现一个Service类,我们命名之为MainService,那么我们应该如何启动这个Service呢?启动Service一个Service有两种方法:一种是startService (Intent);另外一种是:bindService (Intent);
第一种启动方式,适用于Service独立完成任务,例如说一个下载,如果不需要暂停或者取消的话,可以这样来做。但是,我们这是音乐播放应用,把MediaPlayer放在Service中执行播放,这样的方式很难有暂停等交互。(其实也可以这样做,例如每次交互操作都用startService来做,通过Intent把暂停等命令出入进去,进度条也可以通过广播来发送出去,但是这样做,感觉很丑陋,肯定不是常规的高效做法);
第二种启动方式,可以在onServiceConnected中,获得一个Service对象(可能不是一个Service对象,至少是一个可以接触Service内部操作的句柄)。这样,便可以轻松操作播放和接收进度通知。但是这种方式有弊端,一旦与之绑定的context退出,则绑定接触,Service也会被回收(但是不会执行onDestory方法);
那么是不是就只是简单用第二种启动方式?
当然不是这样,在谷歌官方文档中,有交代,这两种方式并不冲突,而且十分适用于音乐播放类的应用。
原文如下:
A bound service
The service is created when another component (a client) calls bindService(). The client then communicates with the service through an IBinder interface. The client can close the connection by calling unbindService(). Multiple clients can bind to the same service and when all of them unbind, the system destroys the service. (The service does not need to stop itself.)
These two paths are not entirely separate. That is, you can bind to a service that was already started withstartService(). For example, a background music service could be started by calling startService() with anIntent that identifies the music to play. Later, possibly when the user wants to exercise some control over the player or get information about the current song, an activity can bind to the service by calling bindService(). In cases like this, stopService() or stopSelf() does not actually stop the service until all clients unbind.

简单理解是:可以有多个client去绑定同一个Service,并且只有所有绑定的client都解除绑定以后,Service就会被destory掉,不需要执行stopSelf方法,同样不会回调到onDestory方法;一个Client可以绑定一个已经start的Service,这样绑定的话,要停止这个service,则必须先解除一切绑定的client,然后再调用stopService或者stopSelf方法。
得到官方的说法后,就可以放心大胆的写代码了。
为了方便,我们定义一个自己的Application类——BeApplication,来执行相关操作。
在这个Application类的onCreate方法中,我们先启动一个Service,然后绑定这个Service。注意,让自己的BeApplication能够运行,要在manifest文件中的<application/>标签下,定义android:name=”包名加我们application类的类名”。
现在写我们用音乐播放的Service类——MainService,同样记得在manfest文件中声明这个Service。
注意之前在BeApplication中的onServiceConnected方法,我们在那个方法中,取得了由MainService中的onBind方法返回的IBinder对象,并通过这个对象,我们在BeApplication中拿到这个用于播放音乐的Service,这样以来,与Service交互容易的多。
也许你会问,这样已经拿到service对象了,那有何必要去start这个service呢?
注意MainService中的onStartCommend方法,此方法返回了一个int常量,对于这个常量,官方有这样的解释:
START_STICKY
If the system kills the service after onStartCommand() returns, recreate the service and call onStartCommand(), but do not redeliver the last intent. Instead, the system calls onStartCommand() with a null intent, unless there were pending intents to start the service, in which case, those intents are delivered. This is suitable for media players (or similar services) that are not executing commands, but running indefinitely and waiting for a job.

阅读全文

与android音乐播放器项目相关的资料

热点内容
半圆形计算法 浏览:392
手机建立文件夹用什么软件 浏览:730
oss压缩上传 浏览:980
蓝色学校网站源码 浏览:827
androidgridview表格 浏览:604
压缩怎么eq闪 浏览:740
流密码算法openssl 浏览:262
怎么数黄豆个数python 浏览:799
混沌序列加密的结论 浏览:224
最新脱单app哪个好 浏览:638
如何用自己电脑做服务器做网页 浏览:140
服务器安全配置要考什么证书 浏览:633
ipadpro可以编程 浏览:541
外国的程序员和中国的程序员 浏览:153
抖音小店app如何联系客服 浏览:977
linux打开多个终端 浏览:502
linux中的命令 浏览:582
优化小米6相机算法 浏览:261
ak47pdf 浏览:151
人与文化pdf 浏览:642