android 播放器开发

  这篇重发
一直在学习android开发,用博文记下自己开发过程中的点点滴滴岂不是更好,因此申请了博客,记下开发过程,见证自己的成长。学习java的时间不长,android开发的时间就更短了,代码中有什么不合理的地方,希望朋友们提出了。
刚学习android开发的时候就想做一个音乐播放器了,不过一直跟老师做3D游戏,也就没有时间,现在找时间开始做了,希望朋友们提出更好的方式。
音乐播放是在后台的,为达到着这种效果,就要用到Service。Service在后台运行任务,后台的Service可以通过BroadcastReceiver来响应发送的BroadcaIntent来实现前台与后台的Service交互。启动Service需要通过Context对象(可以是一个Activity)调用startService方法或bindServic方法。这里用startService方法来启动,如果没有启动Service,首先调用0nCreate方法,然后调用其onStart方法,如果Service已经启动,则只带有onStart方法,这里只重写了onCreate方法。
首先要开发PlayerMusicService类继承android.app.Service,代码如下:
Java代码   
public class PlayerMusicService extends Service{
	private static MediaPlayer mMediaPlayer;
	public static final String NEXT_MUSIC="com.zs.shao.PlayerMusicService";
	private static int notificationId=0;
	NotificationManager manager;
	Notification notification;
	@Override
	public IBinder onBind(Intent intent) {
		return null;
	}
	@Override
	public void onCreate()
	{
		super.onCreate();
		
		manager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
		Intent intent=new Intent();
		PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0); 
		notification=new Notification();
		notification.icon=R.drawable.icon;
		notification.when=System.currentTimeMillis();
		notification.setLatestEventInfo(this, "Ω静听", null, contentIntent);
		manager.notify(notificationId,notification);
		
		
		mMediaPlayer = new MediaPlayer();
		//mMediaPlayer.setOnPreparedListener();
		mMediaPlayer.setOnCompletionListener(new OnCompletionListener()//当一首歌播放完之后调用该方法
		{
			@Override
			public void onCompletion(MediaPlayer mp) {
				sendBroadcast(new Intent(NEXT_MUSIC));
			}
		});
	}
	@Override
	public void onDestroy()
	{
		super.onDestroy();
		manager.cancel(notificationId);
		System.exit(0);
	}
	public static void playMusic(String path)
	{
		try{
			mMediaPlayer.reset();
			mMediaPlayer.setDataSource(path);
			mMediaPlayer.prepare();
			start();
		}catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	public static void start()
	{
		mMediaPlayer.start();
	}
	public static void pause()
	{
		mMediaPlayer.pause();
	}
	public static void stop()
	{
		mMediaPlayer.stop();
	}
	public static boolean isPlaying()
	{
		return mMediaPlayer.isPlaying();
	}
}


这部分代码在有关android的书籍了都会有所介绍的,大家可以选择更好的看。在onCreate()方法里用到了Notification,在后面将会有所介绍。

    Activity中的IntentFilter和BroadcastReceiver:
Java代码 复制代码  收藏代码
  1. IntentFilter filter = new IntentFilter();   
  2.                 filter.addAction(PlayerMusicService.NEXT_MUSIC);   
  3.                 registerReceiver(recerverInfo, filter);  
IntentFilter filter = new IntentFilter();
                filter.addAction(PlayerMusicService.NEXT_MUSIC);
                registerReceiver(recerverInfo, filter);

Java代码 复制代码  收藏代码
  1. protected BroadcastReceiver recerverInfo=new BroadcastReceiver()   
  2.      {   
  3.             @Override  
  4.             public void onReceive(Context context, Intent intent) {   
  5.                 String action=intent.getAction();   
  6.                 if(action.equals(PlayerMusicService.NEXT_MUSIC))   
  7.                 {//收到播放下一首歌曲的消息   
  8.                     nextMusic();   
  9.                     musicName();   
  10.                 }   
  11.             }   
  12.      };  

 

我的播放器的播放列表没有放在android自带的控件里面,而是放在了自己开发的表格里面,只要把表格加以修饰,可以达到自己想要的效果。本人的播放列表只是从SD卡中获取歌曲的信息(编号,歌曲名称,播放时间),然后放在表格中(一般播放器中的添加删除歌曲,最近播放列表等功能暂且没有做),表格里的内容是从一个二维数组里获取的,因此首先需要得到一个存放歌曲信息的二维数组,数组中包括。
这里开发一个PlayerUtil的工具类,代码如下:
Java代码 复制代码  收藏代码
  1. class PlayerUtil {   
  2.     static PlayerActivity activity=new PlayerActivity();   
  3.        
  4.     //把文件名称放在列表里面的方法   
  5.     public static ArrayList<String> musicList(ContentResolver cr,Cursor cursor)   
  6.     {   
  7.         ArrayList<String> resultList=new ArrayList<String>();   
  8.         cursor=cr.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);   
  9.         if(cursor==null)   
  10.         {   
  11.             return  resultList;   
  12.         }   
  13.         else{   
  14.             while(cursor.moveToNext())   
  15.             {   
  16.                 String musicName=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));   
  17.                 resultList.add(musicName);   
  18.             }   
  19.             return  resultList;   
  20.         }   
  21.            
  22.     }   
  23.     //把歌曲时间放在列表里面的方法   
  24.     public static ArrayList<String> musicTimeList(ContentResolver cr,Cursor cursor)   
  25.     {   
  26.         ArrayList<String> resultList=new ArrayList<String>();   
  27.         cursor=cr.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);   
  28.         if(cursor==null)   
  29.         {   
  30.             return  resultList;   
  31.         }   
  32.         else{   
  33.             while(cursor.moveToNext())   
  34.             {   
  35.                 String musicName=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));   
  36.                 resultList.add(musicName);   
  37.             }   
  38.             return  resultList;   
  39.         }   
  40.            
  41.     }   
  42.     //把放在arraylist中的歌名放进二维数组中的方法   
  43.     public static String[][] musicString(ContentResolver cr,Cursor cursor)   
  44.     {   
  45.         ArrayList<String> musicName=new ArrayList<String>();   
  46.         ArrayList<String> musicTime=new ArrayList<String>();   
  47.         musicName=musicList(cr,cursor);//歌曲名字  
  48.         musicTime=musicTimeList(cr,cursor);//歌曲时间  
  49.         String[][]result=new String[musicName.size()][];   
  50.         if(musicName.size()==0)   
  51.         {   
  52.             return result;   
  53.         }   
  54.         else  
  55.         {   
  56.             for(int i=0;i<musicName.size();i++)   
  57.             {   
  58.                 String[]tempCol=new String[3];   
  59.                 tempCol[0]=(i+1)+"";   
  60.                 //歌曲名称   
  61.                 tempCol[1]=musicName.get(i);   
  62.                 if(tempCol[1].length()>11)   
  63.                 {   
  64.                     tempCol[1]=tempCol[1].substring(0,11)+"...";   
  65.                 }   
  66.                 //歌曲时间   
  67.                 if((Integer.parseInt(musicTime.get(i).trim())/1000)%60<10)   
  68.                 {   
  69.                     tempCol[2]=Integer.parseInt(musicTime.get(i).trim())/1000/60+":"+"0"+(Integer.parseInt(musicTime.get(i).trim())/1000)%60;   
  70.                 }   
  71.                 else{   
  72.                     tempCol[2]=Integer.parseInt(musicTime.get(i).trim())/1000/60+":"+(Integer.parseInt(musicTime.get(i).trim())/1000)%60;   
  73.                     }   
  74.                 result[i]=tempCol;   
  75.             }   
  76.             return result;   
  77.         }   
  78.            
  79.            
  80.     }   
  81. }  
class PlayerUtil {
	static PlayerActivity activity=new PlayerActivity();
	
	//把文件名称放在列表里面的方法
	public static ArrayList<String> musicList(ContentResolver cr,Cursor cursor)
	{
		ArrayList<String> resultList=new ArrayList<String>();
		cursor=cr.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
		if(cursor==null)
		{
			return  resultList;
		}
		else{
			while(cursor.moveToNext())
			{
				String musicName=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.TITLE));
				resultList.add(musicName);
			}
			return  resultList;
		}
		
	}
	//把歌曲时间放在列表里面的方法
	public static ArrayList<String> musicTimeList(ContentResolver cr,Cursor cursor)
	{
		ArrayList<String> resultList=new ArrayList<String>();
		cursor=cr.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
		if(cursor==null)
		{
			return  resultList;
		}
		else{
			while(cursor.moveToNext())
			{
				String musicName=cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
				resultList.add(musicName);
			}
			return  resultList;
		}
		
	}
	//把放在arraylist中的歌名放进二维数组中的方法
	public static String[][] musicString(ContentResolver cr,Cursor cursor)
	{
		ArrayList<String> musicName=new ArrayList<String>();
		ArrayList<String> musicTime=new ArrayList<String>();
		musicName=musicList(cr,cursor);//歌曲名字
		musicTime=musicTimeList(cr,cursor);//歌曲时间
		String[][]result=new String[musicName.size()][];
		if(musicName.size()==0)
		{
			return result;
		}
		else
		{
			for(int i=0;i<musicName.size();i++)
			{
				String[]tempCol=new String[3];
				tempCol[0]=(i+1)+"";
				//歌曲名称
				tempCol[1]=musicName.get(i);
				if(tempCol[1].length()>11)
				{
					tempCol[1]=tempCol[1].substring(0,11)+"...";
				}
				//歌曲时间
				if((Integer.parseInt(musicTime.get(i).trim())/1000)%60<10)
				{
					tempCol[2]=Integer.parseInt(musicTime.get(i).trim())/1000/60+":"+"0"+(Integer.parseInt(musicTime.get(i).trim())/1000)%60;
				}
				else{
					tempCol[2]=Integer.parseInt(musicTime.get(i).trim())/1000/60+":"+(Integer.parseInt(musicTime.get(i).trim())/1000)%60;
					}
				result[i]=tempCol;
			}
			return result;
		}
		
		
	}
}

之前说过,歌曲列表放在一个自己开发的表格里面,由于某些问题,我也不知道能不能粘贴源代码,这里就先不粘贴了,不过大家可以自己写一个,也可以用listView代替。这里只能贴图了,这是原来的图,新图还没有抓呢。

播放列表放在一个表格里,而这个表格放在一个LinearLayout里面,新建一个名为musicname的xml文件如下:
Java代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:id="@+id/LinearLayout01"  
  4.     android:background="#eef5fd"  
  5.     android:orientation="vertical"  
  6.     android:layout_width="fill_parent"  
  7.     android:layout_height="fill_parent"  
  8.     >   
  9. </LinearLayout>  
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:id="@+id/LinearLayout01"
	android:background="#eef5fd"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
	>
</LinearLayout>


然后获得存放歌曲信息的二维数组,就可写出播放列表的界面
Java代码 复制代码  收藏代码
  1. setContentView(R.layout.musicname);   
  2.                     table= new Table(   
  3.                              PlayerActivity.this,   
  4.                             width,//表示列宽   
  5.                                musicname,//表示列名  
  6.                             height,//表头高度   
  7.                             fontSize,//表头字体大小  
  8.                             fontColor,//表头字体颜色  
  9.                             frameColor,//边框颜色  
  10.                             headColor,//表头背景颜色  
  11.                             oddColor,//表体单数行背景颜色  
  12.                             evenColor,//表体偶数行背景颜色  
  13.                             biaotiColor,//表体文字颜色  
  14.                             tableContent,//表体内容  
  15.                             number,//每页显示的行数         
  16.                             moveNumber,//每次移动的行数  
  17.                             isNumber//表示是否是数字串  
  18.                     );   
  19.                  LinearLayout ll=(LinearLayout)findViewById(R.id.LinearLayout01);   
  20.                     ll.addView(table);    
  21.                        
  22.                     //实现表格的监听方法   
  23.                     table.addTableClickListener(   
  24.                         new TableClickListener(){   
  25.                     @Override  
  26.                     public void clickItem(Table eventSource, int row) {                        
  27.                currentMusic=row;//当前歌曲的索引等于列表的当前行数。                           
  28.                             musicName=eventSource.tableContent[currentMusic][1].trim();   
  29.                             if(musicName.length()>11)   
  30.                             {   
  31.                                 musicName=musicName.substring(011)+"...";   
  32.                             }   
  33.                         startPauseButton=1;//让播放按钮为播放状态  
  34.                             new Thread()   
  35.                             {   
  36.                                 public void run()   
  37.                                 {   
  38.                                     playMusic(currentMusic);   
  39.                                 }   
  40.                             }.start();   
  41.                             hd.sendEmptyMessage(GOPLAYMUSIC);   
  42.                         }}   
  43.                     );  
setContentView(R.layout.musicname);
        	        table= new Table(
        	        		 PlayerActivity.this,
        	    			width,//表示列宽
        	        		   musicname,//表示列名
        	    			height,//表头高度
        	    			fontSize,//表头字体大小
        	    			fontColor,//表头字体颜色
        	    			frameColor,//边框颜色
        	    			headColor,//表头背景颜色
        	    			oddColor,//表体单数行背景颜色
        	    			evenColor,//表体偶数行背景颜色
        	    			biaotiColor,//表体文字颜色
        	    			tableContent,//表体内容
        	    			number,//每页显示的行数       
        	    			moveNumber,//每次移动的行数
        	    			isNumber//表示是否是数字串
        	    	);
        	     LinearLayout ll=(LinearLayout)findViewById(R.id.LinearLayout01);
            		ll.addView(table); 
        	        
        	        //实现表格的监听方法
        	        table.addTableClickListener(
        	        	new TableClickListener(){
        			@Override
        			public void clickItem(Table eventSource, int row) {  					
        	   currentMusic=row;//当前歌曲的索引等于列表的当前行数。     					
        					musicName=eventSource.tableContent[currentMusic][1].trim();
        					if(musicName.length()>11)
        			    	{
        			    		musicName=musicName.substring(0, 11)+"...";
        			    	}
        				startPauseButton=1;//让播放按钮为播放状态
        					new Thread()
        					{
        						public void run()
        						{
        							playMusic(currentMusic);
        						}
        					}.start();
        					hd.sendEmptyMessage(GOPLAYMUSIC);
        				}}
        	        );

 

播放界面做的最不完善,需要在接下来的日子里一步一步完善,播放界面如下:
Xml代码 复制代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     android:background="@drawable/background"  
  7.     >  
  8. <LinearLayout    
  9.     android:orientation="horizontal"  
  10.     android:layout_width="320dip"  
  11.     android:layout_height="64dip"  
  12.     android:layout_marginTop="5dip"  
  13.     >  
  14. <ImageView  
  15.     android:id="@+id/ImageView01"  
  16.     android:layout_width="64dip"  
  17.     android:layout_height="64dip"  
  18.     android:layout_marginLeft="5dip"  
  19.     android:background="@drawable/yinyue"  
  20.     >  
  21. </ImageView>  
  22. <TextView  
  23.     android:id="@+id/TextView01"  
  24.     android:text=""  
  25.     android:layout_width="240dip"  
  26.     android:layout_height="50dip"  
  27.     android:layout_marginLeft="10dip"  
  28.     android:layout_marginRight="10dip"  
  29.     android:layout_marginTop="15dip"  
  30.     >  
  31. </TextView>  
  32. </LinearLayout>  
  33. <LinearLayout  
  34.     android:orientation="horizontal"  
  35.     android:layout_width="fill_parent"  
  36.     android:layout_height="wrap_content"  
  37.     android:layout_marginTop="10dip"  
  38.     >  
  39. <ImageButton    
  40.     android:id="@+id/ImageButton01"  
  41.     android:layout_width="45dip"  
  42.     android:layout_height="45dip"  
  43.     android:layout_marginLeft="5dip"  
  44.     android:background="@drawable/start_button"    
  45.     >  
  46. </ImageButton>  
  47. <ImageButton  
  48.     android:id="@+id/ImageButton02"  
  49.     android:layout_width="45dip"  
  50.     android:layout_height="45dip"  
  51.     android:layout_marginLeft="5dip"  
  52.     android:background="@drawable/fron_button"  
  53.     >  
  54. </ImageButton>  
  55. <ImageButton  
  56.     android:id="@+id/ImageButton03"  
  57.     android:layout_width="45dip"  
  58.     android:layout_height="45dip"  
  59.     android:layout_marginLeft="5dip"  
  60.     android:background="@drawable/stop_button"  
  61.     >  
  62. </ImageButton>  
  63. <ImageButton  
  64.     android:id="@+id/ImageButton04"  
  65.     android:layout_width="45dip"  
  66.     android:layout_height="45dip"  
  67.     android:layout_marginLeft="5dip"  
  68.     android:background="@drawable/next_button"  
  69.     >  
  70. </ImageButton>  
  71.   
  72. <ImageButton    
  73.     android:id="@+id/ImageButton05"  
  74.     android:layout_width="90dip"  
  75.     android:layout_height="45dip"  
  76.     android:layout_marginLeft="25dip"  
  77.     android:background="@drawable/list"  
  78.     >  
  79. </ImageButton>  
  80. </LinearLayout>  
  81.        
  82. </LinearLayout>  

Java代码 复制代码  收藏代码
  1. setContentView(R.layout.main);   
  2.                     //初始默认第一首歌   
  3.                     musicName();//歌曲名字的方法;                    
  4.                     ImageButton startButton=(ImageButton)findViewById(R.id.ImageButton01);   
  5.                     ImageButton frontButton=(ImageButton)findViewById(R.id.ImageButton02);   
  6.                     ImageButton stopButton=(ImageButton)findViewById(R.id.ImageButton03);   
  7.                     ImageButton nextButton=(ImageButton)findViewById(R.id.ImageButton04);   
  8.                     ImageButton listButton=(ImageButton)findViewById(R.id.ImageButton05);   
  9.                     switch(startPauseButton)   
  10.                     {//0代表暂停状态,1代表播放状态   
  11.                     case 0:   
  12.                         startButton.setBackgroundResource(R.drawable.start_button);   
  13.                         break;   
  14.                     case 1:   
  15.                         startButton.setBackgroundResource(R.drawable.pause_button);   
  16.                         break;   
  17.                     }   
  18.                     startButton.setOnClickListener(//开始按钮的监听  
  19.                     new OnClickListener()   
  20.                     {   
  21.                         public void  onClick(View v)   
  22.                         {   
  23.                             ImageButton startButton=(ImageButton)findViewById(R.id.ImageButton01);                             
  24.                             if(PlayerMusicService.isPlaying())   
  25.                             {   
  26.                                 startPauseButton=0;                            
  27.                                 PlayerMusicService.pause();   
  28.                                 startButton.setBackgroundResource(R.drawable.start_button);   
  29.                             }   
  30.                             else  
  31.                             {   
  32.                                 startPauseButton=1;   
  33.                                 if(clicknumber==0)   
  34.                                 {   
  35.                                     new Thread()   
  36.                                     {   
  37.                                         public void run()   
  38.                                         {   
  39.                                             playMusic(currentMusic);   
  40.                                         }   
  41.                                     }.start();   
  42.                                     musicName();//歌曲名字的方法;  
  43.                                     startButton.setBackgroundResource(R.drawable.pause_button);   
  44.                                 }   
  45.                                 else if(clicknumber>0)   
  46.                                 {                                                  
  47.                                     PlayerMusicService.start();   
  48.                                     musicName();//歌曲名字的方法  
  49.                                     startButton.setBackgroundResource(R.drawable.pause_button);   
  50.                                 }   
  51.                             }   
  52.                             clicknumber++;// 点击次数增加  
  53.                         }   
  54.                     }   
  55.                     );   
  56.                     frontButton.setOnClickListener(//上一首歌按钮监听器  
  57.                     new OnClickListener()   
  58.                     {   
  59.                         @Override  
  60.                         public void onClick(View v) {   
  61.                             clicknumber++;// 点击次数增加  
  62.                             ImageButton startButton=(ImageButton)findViewById(R.id.ImageButton01);                             
  63.                             frontMusic();   
  64.                             musicName();//歌曲名字的方法                         
  65.                             startButton.setBackgroundResource(R.drawable.pause_button);   
  66.                         }   
  67.                            
  68.                     });   
  69.                     stopButton.setOnClickListener(//停止按钮监听器  
  70.                             new OnClickListener(){   
  71.                                 @Override  
  72.                                 public void onClick(View v) {   
  73.                                 clicknumber=0;//点击次数设为0  
  74.                                 PlayerMusicService.stop();   
  75.                                 ImageButton startButton=(ImageButton)findViewById(R.id.ImageButton01);   
  76.                                 startButton.setBackgroundResource(R.drawable.start_button);   
  77.                                 TextView nameTV=(TextView)findViewById(R.id.TextView01);   
  78.                                 nameTV.setText("");   
  79.                                 }   
  80.                             });   
  81.                     nextButton.setOnClickListener(//下一首歌按钮监听器  
  82.                             new OnClickListener(){   
  83.                                 @Override  
  84.                                 public void onClick(View v) {   
  85.                                     clicknumber++;// 点击次数增加  
  86.                                     ImageButton startButton=(ImageButton)findViewById(R.id.ImageButton01);   
  87.                                     nextMusic();   
  88.                                     musicName();//歌曲名字的方法  
  89.                                     startButton.setBackgroundResource(R.drawable.pause_button);   
  90.                                 }   
  91.                             });   
  92.                     listButton.setOnClickListener(//播放列表按钮监听器  
  93.                             new OnClickListener(){   
  94.                                 @Override  
  95.                                 public void onClick(View v) {   
  96.                                     clicknumber++;// 点击次数增加  
  97.                                     hd.sendEmptyMessage(GOMUSCILIST);   
  98.                                 }   
  99.                             });  
setContentView(R.layout.main);
        			//初始默认第一首歌
        			musicName();//歌曲名字的方法;        			
        	        ImageButton startButton=(ImageButton)findViewById(R.id.ImageButton01);
        	        ImageButton frontButton=(ImageButton)findViewById(R.id.ImageButton02);
        	        ImageButton stopButton=(ImageButton)findViewById(R.id.ImageButton03);
        	        ImageButton nextButton=(ImageButton)findViewById(R.id.ImageButton04);
        	        ImageButton listButton=(ImageButton)findViewById(R.id.ImageButton05);
        	        switch(startPauseButton)
        	        {//0代表暂停状态,1代表播放状态
        	        case 0:
        	        	startButton.setBackgroundResource(R.drawable.start_button);
        	        	break;
        	        case 1:
        	        	startButton.setBackgroundResource(R.drawable.pause_button);
        	        	break;
        	        }
        	        startButton.setOnClickListener(//开始按钮的监听
        	        new OnClickListener()
        	        {
        	        	public void  onClick(View v)
        	        	{
        	        		ImageButton startButton=(ImageButton)findViewById(R.id.ImageButton01);      	        		
        	        		if(PlayerMusicService.isPlaying())
        	        		{
        	        			startPauseButton=0;  	            		
        	            		PlayerMusicService.pause();
        	            		startButton.setBackgroundResource(R.drawable.start_button);
        	        		}
        	        		else
        	        		{
        	        			startPauseButton=1;
        	        			if(clicknumber==0)
        	        			{
        	        				new Thread()
        	        				{
        	        					public void run()
        	        					{
        	        						playMusic(currentMusic);
        	        					}
        	        				}.start();
        	        				musicName();//歌曲名字的方法;
        	        				startButton.setBackgroundResource(R.drawable.pause_button);
        	        			}
        	        			else if(clicknumber>0)
        	        			{   					        				
        	        				PlayerMusicService.start();
        	        				musicName();//歌曲名字的方法
        	        				startButton.setBackgroundResource(R.drawable.pause_button);
        	        			}
        	        		}
        	        		clicknumber++;// 点击次数增加
        	        	}
        	        }
        	        );
        	        frontButton.setOnClickListener(//上一首歌按钮监听器
        	        new OnClickListener()
        	        {
        				@Override
        				public void onClick(View v) {
        					clicknumber++;// 点击次数增加
        					ImageButton startButton=(ImageButton)findViewById(R.id.ImageButton01);	        				
        					frontMusic();
        					musicName();//歌曲名字的方法      					
        					startButton.setBackgroundResource(R.drawable.pause_button);
        				}
        	        	
        	        });
        	        stopButton.setOnClickListener(//停止按钮监听器
        	                new OnClickListener(){
        	        			@Override
        	        			public void onClick(View v) {
        	        			clicknumber=0;//点击次数设为0
        	        			PlayerMusicService.stop();
        	        			ImageButton startButton=(ImageButton)findViewById(R.id.ImageButton01);
        	        			startButton.setBackgroundResource(R.drawable.start_button);
        	        			TextView nameTV=(TextView)findViewById(R.id.TextView01);
        	        			nameTV.setText("");
        	        			}
        	                });
        	        nextButton.setOnClickListener(//下一首歌按钮监听器
        	                new OnClickListener(){
        	        			@Override
        	        			public void onClick(View v) {
        	        				clicknumber++;// 点击次数增加
        	        				ImageButton startButton=(ImageButton)findViewById(R.id.ImageButton01);
        	        				nextMusic();
        	        				musicName();//歌曲名字的方法
        	        				startButton.setBackgroundResource(R.drawable.pause_button);
        	        			}
        	                });
        	        listButton.setOnClickListener(//播放列表按钮监听器
        	                new OnClickListener(){
        	        			@Override
        	        			public void onClick(View v) {
        	        				clicknumber++;// 点击次数增加
        	        				hd.sendEmptyMessage(GOMUSCILIST);
        	        			}
        	                });

要播放音乐,就要先获得歌曲信息,在onResume()方法中:
Java代码 复制代码  收藏代码
  1. cursor=cr.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);  
cursor=cr.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,MediaStore.Audio.Media.DEFAULT_SORT_ORDER);

在播放界面中用到几个方法,如下:
Java代码 复制代码  收藏代码
  1. //播放相应索引歌曲的方法   
  2.     public void playMusic(int index)   
  3.     {   
  4.         cursor.moveToPosition(index);   
  5.         String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));   
  6.         PlayerMusicService.playMusic(path);   
  7.     }   
  8.     public void musicName()//设置歌曲名字的方法  
  9.     {   
  10.         TextView nameTV=(TextView)findViewById(R.id.TextView01);   
  11.          nameTV.setTextColor(Color.BLUE);   
  12.          nameTV.setTextSize(20);   
  13.          if(tableContent.length>0)   
  14.          {   
  15.              musicName=tableContent[currentMusic][1].trim();   
  16.              if(musicName.length()>11)   
  17.             {    
  18.                 musicName=musicName.substring(011)+"...";   
  19.             }   
  20.             nameTV.setText(musicName);   
  21.          }   
  22.            
  23.     }   
  24.     public void nextMusic()//播放下一首歌曲  
  25.     {   
  26.         if(++currentMusic>tableContent.length-1)   
  27.         {   
  28.             currentMusic=0;   
  29.             new Thread()   
  30.             {   
  31.                 public void run()   
  32.                 {   
  33.                     playMusic(currentMusic);   
  34.                 }   
  35.             }.start();   
  36.         }else  
  37.         {   
  38.             new Thread()   
  39.             {   
  40.                 public void run()   
  41.                 {   
  42.                     playMusic(currentMusic);   
  43.                 }   
  44.             }.start();   
  45.         }   
  46.     }   
  47.     public void frontMusic()//播放上一首播个歌的方法  
  48.     {   
  49.         if(--currentMusic<0)   
  50.         {   
  51.             currentMusic=tableContent.length-1;   
  52.             new Thread()   
  53.             {   
  54.                 public void run()   
  55.                 {   
  56.                     playMusic(currentMusic);   
  57.                 }   
  58.             }.start();   
  59.         }else  
  60.         {   
  61.             new Thread()   
  62.             {   
  63.                 public void run()   
  64.                 {   
  65.                     playMusic(currentMusic);   
  66.                 }   
  67.             }.start();   
  68.         }   
  69.     }  
//播放相应索引歌曲的方法
    public void playMusic(int index)
    {
    	cursor.moveToPosition(index);
		String path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
		PlayerMusicService.playMusic(path);
    }
    public void musicName()//设置歌曲名字的方法
    {
    	TextView nameTV=(TextView)findViewById(R.id.TextView01);
    	 nameTV.setTextColor(Color.BLUE);
	     nameTV.setTextSize(20);
	     if(tableContent.length>0)
	     {
	    	 musicName=tableContent[currentMusic][1].trim();
	    	 if(musicName.length()>11)
	     	{ 
	     		musicName=musicName.substring(0, 11)+"...";
	     	}
	 		nameTV.setText(musicName);
	     }
    	
    }
    public void nextMusic()//播放下一首歌曲
    {
    	if(++currentMusic>tableContent.length-1)
		{
			currentMusic=0;
			new Thread()
			{
				public void run()
				{
					playMusic(currentMusic);
				}
			}.start();
		}else
		{
			new Thread()
			{
				public void run()
				{
					playMusic(currentMusic);
				}
			}.start();
		}
    }
    public void frontMusic()//播放上一首播个歌的方法
    {
    	if(--currentMusic<0)
		{
			currentMusic=tableContent.length-1;
			new Thread()
			{
				public void run()
				{
					playMusic(currentMusic);
				}
			}.start();
		}else
		{
			new Thread()
			{
				public void run()
				{
					playMusic(currentMusic);
				}
			}.start();
		}
    }

1

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值