【Android开发】媒体之音乐播放器

可以对音乐文件实现播放、暂停、重播和停止功能。退出应用和回到桌面时音乐停止。

主界面:

 

主界面配置文件mian.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.musicplay.MainActivity" >
    <TextView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/filename" />
    <EditText
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.00"
        android:background="#B0C4DE"
        android:text="Payphone.mp3"
        android:id="@+id/filename" />
    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
         >
        <Button
            android:id="@+id/playbutton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="mediaplay"
            android:text="@string/playbutton" />
        <Button
            android:id="@+id/pausebutton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="mediaplay"
            android:text="@string/pausebutton" />
        <Button
            android:id="@+id/resetbutton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="mediaplay"
            android:text="@string/resetbutton" />
        <Button
            android:id="@+id/stopbutton"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="mediaplay"
            android:text="@string/stopbutton" />
    </LinearLayout>
</LinearLayout>

主界面的Activity
MainActivity.java:

package com.example.musicplay;
import java.io.File;
import android.app.Activity;
import android.content.Context;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnPreparedListener;
import android.os.Bundle;
import android.os.Environment;
import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
 private EditText nameText;
 private String path;
 private int position;
 private MediaPlayer mediaplayer;
 private boolean pause;
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  nameText=(EditText) this.findViewById(R.id.filename);
  mediaplayer=new MediaPlayer();

 }

  //以下方法会造成只要应用在后台音乐都会停止播放
 @Override
 //当应用不在前台时,停止播放
 protected void onPause() {
  if(mediaplayer.isPlaying()){
   position=mediaplayer.getCurrentPosition();
   mediaplayer.stop();
  }
  super.onPause();
 }

 @Override
 protected void onResume() {
  if(position>0&&path!=null){
   play();
   mediaplayer.seekTo(position);
   position=0;
  }
  super.onResume();
 }
 @Override
 protected void onDestroy() {
  mediaplayer.release();
  mediaplayer=null;
  super.onDestroy();
 }
 public void mediaplay(View v){
  switch (v.getId()) {
  case R.id.playbutton:
   String filename=nameText.getText().toString();
   //Environment.getExternalStorageDirectory()检查外部存储设备的可用性
   File audio=new File(Environment.getExternalStorageDirectory(),filename);
   if(audio.exists()){
    //获取SDCard目录,2.2的时候为:/mnt/sdcart  2.1的时候为:/sdcard,所以使用静态方法得到路径会好一点。
    path=audio.getAbsolutePath();
    play();
   }
   else{
    path=null;
    Toast.makeText(getApplicationContext(), R.string.error, 1).show();
   }
   break;

  case R.id.pausebutton:
   if(mediaplayer.isPlaying()){
    mediaplayer.pause();
    pause=true;
    ((Button)v).setText(R.string.continues);
   }else{
    if(pause){
     mediaplayer.start();
     pause=false;
     ((Button)v).setText(R.string.pausebutton);
    }
   }
   break;

  case R.id.resetbutton:
   if(mediaplayer.isPlaying()){
    mediaplayer.seekTo(0);//从开始位置播放
   }else{
    if(path!=null){
     play();
    }
   }
   break;

  case R.id.stopbutton:
   if(mediaplayer.isPlaying()){
    mediaplayer.stop();
   }
   break;

  default:
   break;
  }
 }
 private void play() {
  try {
   mediaplayer.reset();//把各项参数恢复到初始化状态
   mediaplayer.setDataSource(path);
   mediaplayer.prepare();//进行缓冲
   //设置缓冲监听器
   mediaplayer.setOnPreparedListener(new OnPreparedListener() {

    //缓冲完毕后调用onPrepared方法
    public void onPrepared(MediaPlayer mp) {
     // 里面写缓冲完要干的事
     mediaplayer.start();
    }
   });
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

实现了简单的实现SD卡中音乐的播放。

转载请注明出处!程序猿之洞:http://blog.csdn.net/acmman

时间: 2024-10-25 19:33:58

【Android开发】媒体之音乐播放器的相关文章

android 如何获取第三方音乐播放器上的,歌手,歌名,进度在自己应用显示

问题描述 android 如何获取第三方音乐播放器上的,歌手,歌名,进度在自己应用显示 各位大神求助,最近项目要求获取像酷狗,qq,虾米,网易这些第三方播放器上的音乐信息到自己的应用上,在自己应用能显示当前播放音乐的歌手,歌名等信息,重要的是显示进度.之前用接收广播实现过,但有些播放器未发送广播 求助各位大神,好人有好报!谢谢了! 解决方案 我也没用过,等着看别人回答 解决方案二: 看看这些播放器是不是提供了api 解决方案三: 可以看看这个demo 解决方案四: if (mHandler ==

应用-android 如何获取第三方音乐播放器信息,歌名,进度

问题描述 android 如何获取第三方音乐播放器信息,歌名,进度 各位大神求助,最近项目要求获取像酷狗,qq,虾米,网易这些第三方播放器上的音乐信息到自己的应用上,在自己应用能显示当前播放音乐的歌手,歌名等信息,重要的是显示进度.之前用接收广播实现过,但有些播放器未发送广播 求助各位大神,好人有好报!谢谢了! 解决方案 额...第三方的音乐播放器的音乐也是存储在本地的...在播放的过程,会自动下载下来...存在相应的文件夹上,这样一来,其实,你可以搜索本地音乐的.但 你不想那么做的话,你可以去

OPhone程序开发入门之音乐播放器

OPhone平台提供了完整的多媒体解决方案.为开发者提供了统一的,简单易用的开发接口.本文首先介绍了OPhone平台的多媒体框架,然后详细介绍了 在OPhone平台上开发音乐播放程序所需的基本知识.通过一步一步构建一个简单的音乐播放器示例程序,来帮助读者了解具体的开发过程.该示例涵盖了Application,Activity,Service,Intent,BroadCast  Receiver等基本概念,使读者对OPhone程序的开发有一个全面的了解,进一步巩固和熟悉这些基本概念.最后介绍了如何

Android基于Service的音乐播放器_Android

本文开发一个基于Service的音乐播放器,音乐由后台运行的Service负责播放,当后台的播放状态发生变化时,程序将会通过发送广播通知前台Activity更新界面:当点击Activity的界面按钮时,系统将通过发送广播通知后台Service来改变播放状态. 前台Activity界面有两个按钮,分别用于控制播放/暂停.停止,另外还有两个文本框,用于显示正在播放的歌曲名.歌手名.前台Activity的代码如下: public class MainActivity extends AppCompat

Android基于Service的音乐播放器

本文开发一个基于Service的音乐播放器,音乐由后台运行的Service负责播放,当后台的播放状态发生变化时,程序将会通过发送广播通知前台Activity更新界面:当点击Activity的界面按钮时,系统将通过发送广播通知后台Service来改变播放状态. 前台Activity界面有两个按钮,分别用于控制播放/暂停.停止,另外还有两个文本框,用于显示正在播放的歌曲名.歌手名.前台Activity的代码如下: public class MainActivity extends AppCompat

android手机音乐播放器实现歌词同步

  最近在做一款android手机上的音乐播放器,学习到了很多东西,像是Fragment,ActionBar的使用等等,这里就先介绍一下歌词同步的实现问题. 歌词同步的实现思路很简单:获取歌词文件LRC中的时间和歌词内容,然后在指定的时间内播放相应的内容.获取不难,难就在于如何在手机屏幕上实现歌词的滚动. 先上效果图:   先从最基本的读取歌词文件开始: Public class LrcHandle { private List mWords = new ArrayList(); private

其他发行版本安装深度音乐播放器

其他 Linux 发行版本,如 Ubuntu.Linux Mint 等都可以直接下载 Deb 格式安装包来安装 Linux Deepin 精心开发的深度音乐播放器. 下面,以 Ubuntu 为例,介绍如何安装深度音乐播放器. 我们需要 Deepin UI 库安装包(使深度音乐播放器达到精彩绝伦的效果).打过补丁的 Deepin python-gtk2 包(防止内存泄漏),当然还有深度音乐播放器安装包. #1,安装 Deepin python-gtk2 包 下载地址:32 位包 | 64 位包 下

Android 音乐播放器的开发实例详解_Android

   本文将引导大家做一个音乐播放器,在做这个Android开发实例的过程中,能够帮助大家进一步熟悉和掌握学过的ListView和其他一些组件.为了有更好的学习效果,其中很多功能我们手动实现,例如音乐播放的快进快退等.        先欣赏下本实例完成后运行的界面效果:         首先我们建立项目,我使用的SDK是Android2.2的,然后在XML中进行布局.        上方是一个ListView用来显示我们的音乐列表,中间是一个SeekBar可以拖动当前音乐的播放进度,之所以用Se

android虚拟机-android开发 音乐播放器 把歌曲添加到我的最爱列表

问题描述 android开发 音乐播放器 把歌曲添加到我的最爱列表 歌曲在数据库,能播放 , ,不知道怎样把它添加到我的最爱列表里 , ,求代码说明 解决方案 1.首先要知道你那个列表是什么控件 2.把歌曲信息add进去 3.设置点击事件,若点击对应歌曲则将歌曲路径传入播放器