音乐

1.实例:

新建一个Servicem,自定义服务类,用于获取音频数据,并且调用方法,根据音频位置进行播放。

 package com.bzu.xuyinghui 

 import java.io.IOException;

 import android.app.Service;

  import android.content.Intent;

  import android.database.Cursor;

  import android.media.MediaPlayer;

  import android.net.Uri;

  import android.os.IBinder;

  importandroid.provider.MediaStore;

  importandroid.widget.Toast; 

  //定义音乐服务类

  public class MusicService extendsService {

     // 定义需要显示的音乐的字段

      String[] mCursorCols = new String[] {

              "audio._id AS_id", // index must matchIDCOLIDX below

             MediaStore.Audio.Media.ARTIST, MediaStore.Audio.Media.ALBUM,

              MediaStore.Audio.Media.TITLE,MediaStore.Audio.Media.DATA,

              MediaStore.Audio.Media.MIME_TYPE,MediaStore.Audio.Media.ALBUM_ID,

             MediaStore.Audio.Media.ARTIST_ID,MediaStore.Audio.Media.DURATION };

     private MediaPlayer mMediaPlayer; // 声明播放器

     private Cursor mCursor; // 声明游标

      private int mPlayPosition = 0; // 当前播放的歌曲 

     // 注册意图

      public static final StringPLAY_ACTION = "com.wyl.music.PLAY_ACTION";

     public static final StringPAUSE_ACTION = "com.wyl.music.PAUSE_ACTION";

      public static final StringNEXT_ACTION = "com.wyl.music.NEXT_ACTION";

      public static final StringPREVIOUS_ACTION = "com.wyl.music.PREVIOUS_ACTION"; 

      @Override

     public IBinderonBind(Intent arg0) {

         return null;

      }

     @Override

      public void onCreate() {

          super.onCreate();

          mMediaPlayer = new MediaPlayer();

          Uri MUSIC_URL =MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;// 通过一个URI可以获取所有音频文件

         //默认大于10秒的可以看作是系统音乐

          mCursor =getContentResolver().query(MUSIC_URL, mCursorCols,

                  "duration >10000", null, null);

      } 

      @Override

      public void onStart(Intentintent, int startId) {

          super.onStart(intent, startId);

         // 根据不同的action,做不同的相应

          String action = intent.getAction();

         //播放

          if(action.equals(PLAY_ACTION)) {

              play();

         //暂停

          } else if(action.equals(PAUSE_ACTION)) {

              pause();

        //下一首

          } else if(action.equals(NEXT_ACTION)) {

              next();

         //前一首

          } else if(action.equals(PREVIOUS_ACTION)) {

              previous();

          }

      }

    // 播放音乐

      public void play() {

         //初始化音乐播放器

          inite();

      } 

    // 暂停时,结束服务

      public void pause() {

         //暂停音乐播放

          stopSelf();

      } 

     // 上一首

      public void previous() {

         //得到前一首的歌曲

          if (mPlayPosition == 0) {

              mPlayPosition = mCursor.getCount()- 1;

          } else {

              mPlayPosition--;

          }

         //开始播放

          inite();

      } 

     // 下一首

      public void next() {

         //得到后一首歌曲

          if (mPlayPosition ==mCursor.getCount() - 1) {

              mPlayPosition = 0;

          } else {

             mPlayPosition++;

          }

         //开始播放

        inite();    }

     // 初始化播放器

    public void inite() {

         //充值MediaPlayer

        mMediaPlayer.reset();

         // 获取歌曲位置

         String dataSource =getDateByPosition(mCursor, mPlayPosition);

         // 歌曲信息

        String info = getInfoByPosition(mCursor, mPlayPosition);

         // Toast显示歌曲信息

        Toast.makeText(getApplicationContext(), info, Toast.LENGTH_SHORT)

                 .show();

        try {

             // 播放器绑定资源

            mMediaPlayer.setDataSource(dataSource);

             // 播放器准备

             mMediaPlayer.prepare();

             // 播放

             mMediaPlayer.start();

        } catch (IllegalArgumentException e1) {

             e1.printStackTrace();

        } catch (IllegalStateException e1) {

             e1.printStackTrace();

        } catch (IOException e1) {

             e1.printStackTrace();

        }

    } 

     // 根据位置来获取歌曲位置

    public String getDateByPosition(Cursor c, int position) {

         c.moveToPosition(position);

        int dataColumn =c.getColumnIndex(MediaStore.Audio.Media.DATA);

        String data = c.getString(dataColumn);

        return data;

    } 

     // 获取当前播放歌曲演唱者及歌名

    public String getInfoByPosition(Cursor c, int position) {

         c.moveToPosition(position);

        int titleColumn = c.getColumnIndex(MediaStore.Audio.Media.TITLE);

        int artistColumn =c.getColumnIndex(MediaStore.Audio.Media.ARTIST);

         String info =c.getString(artistColumn) + " "                 + c.getString(titleColumn);

        return info; 

    }      // 服务结束时要释放MediaPlayer

    public void onDestroy() {

        super.onDestroy();

        mMediaPlayer.release();

    }

 }

MainActivity.java:




 package com.bzu.xuyinghui; 

 importandroid.app.Activity;

 importandroid.content.ComponentName;

  importandroid.content.Intent;

  importandroid.os.Bundle;

  importandroid.view.View;

  importandroid.view.View.OnClickListener;

  importandroid.widget.Button; 

 //定义了本实例的主要Activity

 public class MainActivity extends Activity implements OnClickListener {

         //初始化控件

     private Button mBtnPrevious; // 上一首

     private Button mBtnPlay; // 播放

     private Button mBtnNext; // 下一首

     private Button mBtnPause; // 暂停

     private ComponentName component; // 用于启动服务

 

    public void onCreate(BundlesavedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);         // 得到布局中的控件

        findView();

         // 绑定控件事件

        setListener();

    }

     // 得到布局中的控件

    private void findView() {

        component = new ComponentName(this, MusicService.class);

        mBtnPrevious = (Button) findViewById(R.id.previous);

        mBtnPlay = (Button) findViewById(R.id.play);

        mBtnNext = (Button) findViewById(R.id.next);

        mBtnPause = (Button) findViewById(R.id.pause);

    }

     // 绑定控件事件

    private void setListener() {

        mBtnPrevious.setOnClickListener(this);

        mBtnPlay.setOnClickListener(this);

        mBtnNext.setOnClickListener(this);

        mBtnPause.setOnClickListener(this);

    }

     // 按钮点击事件响应

     public void onClick(View v){

        if(v==mBtnPrevious){

             Intent mIntwnt=new Intent(MusicService.PREVIOUS_ACTION);

              mIntent.setComponent(component);

            startService(mIntent);

         // 如果点击前播放歌曲,就在intent中传递播放当前歌参数

        } else if (v == mBtnPlay) {

             Intent mIntent = newIntent(MusicService.PLAY_ACTION);

             mIntent.setComponent(component);

             startService(mIntent);

         // 如果点击前一首歌,就在intent中传递下一首歌参数

        } else if (v == mBtnNext) {

             Intent mIntent = newIntent(MusicService.NEXT_ACTION);

             mIntent.setComponent(component);

             startService(mIntent);

         // 如果点击前一首歌,就在intent中传递暂停首歌参数

        } else {

            Intent mIntent = newIntent(MusicService.PAUSE_ACTION);

             mIntent.setComponent(component);

             startService(mIntent);

        }

    }






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值