Android音乐播放器制作 扫描本地音乐显示在手机(一)

思路

首先是扫描本地所有的音频文件,然后全部装进集合当中,接下来就是用ListView展示在屏幕上,大概就是这几个步骤了,接下来细讲

创建一个容器

进行过数据解析的朋友都应该知道JavaBean吧,用来装载解析出来的数据,我们这里同样也要创建一个JavaBean,用来装载扫描到的音频文件,具体的代码是:

package com.duanlian.mymusicplayerdemo.bean; 

/**
 * Created by user on 2016/6/24.
 * 放置音乐
 */
public class Song {
 /**
  * 歌手
  */
 public String singer;
 /**
  * 歌曲名
  */
 public String song;
 /**
  * 歌曲的地址
  */
 public String path;
 /**
  * 歌曲长度
  */
 public int duration;
 /**
  * 歌曲的大小
  */
 public long size;
}

创建一个用来扫描本地音频的工具类

类里面定义一个扫描本地音频的方法,其返回值是一个list集合,集合里面装的泛型就是上一步创建的JavaBean,具体代码如下:

package com.duanlian.mymusicplayerdemo.utils; 

import android.content.Context;
import android.database.Cursor;
import android.provider.MediaStore; 

import com.duanlian.mymusicplayerdemo.bean.Song; 

import java.util.ArrayList;
import java.util.List; 

/**
 * 音乐工具类,
 */
public class MusicUtils {
 /**
  * 扫描系统里面的音频文件,返回一个list集合
  */
 public static List<Song> getMusicData(Context context) {
  List<Song> list = new ArrayList<Song>();
  // 媒体库查询语句(写一个工具类MusicUtils)
  Cursor cursor = context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null,
    null, MediaStore.Audio.AudioColumns.IS_MUSIC);
  if (cursor != null) {
   while (cursor.moveToNext()) {
    Song song = new Song();
    song.song = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DISPLAY_NAME));
    song.singer = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
    song.path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA));
    song.duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DURATION));
    song.size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE));
    if (song.size > 1000 * 800) {
     // 注释部分是切割标题,分离出歌曲名和歌手 (本地媒体库读取的歌曲信息不规范)
     if (song.song.contains("-")) {
      String[] str = song.song.split("-");
      song.singer = str[0];
      song.song = str[1];
     }
     list.add(song);
    }
   }
   // 释放资源
   cursor.close();
  } 

  return list;
 } 

 /**
  * 定义一个方法用来格式化获取到的时间
  */
 public static String formatTime(int time) {
  if (time / 1000 % 60 < 10) {
   return time / 1000 / 60 + ":0" + time / 1000 % 60; 

  } else {
   return time / 1000 / 60 + ":" + time / 1000 % 60;
  } 

 }
}

好了,当我们调用这个类的这个扫描的方法,就可以得到一个里面装有本地音频的的list集合了,但是在这之前还得添加一个权限:让这个程序可以读取手机本地的文件,在AndroidManifest.xlm里面添加权限,具体如下:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

数据展示

ListView展示数据需要配合Adapter一起使用,而Adapter里面需要传一个上下文,一个数据源,上下文直接能拿到,数据源上面我们已经拿到了,接下来是写ListView和Adapter的编写,先看看MainActivity的布局文件,非常简单:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context="com.duanlian.mymusicplayerdemo.MainActivity"> 

 <TextView
  android:id="@+id/main_textview"
  android:layout_width="match_parent"
  android:layout_height="40dp"
  android:gravity="center"
  android:text="我的音乐" />
 <ListView
  android:id="@+id/main_listview"
  android:layout_below="@+id/main_textview"
  android:layout_width="match_parent"
  android:layout_height="match_parent"/>
</RelativeLayout>

接下来就是MainActivity里面的编写,具体代码:

package com.duanlian.mymusicplayerdemo; 

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView; 

import com.duanlian.mymusicplayerdemo.adapter.MyAdapter;
import com.duanlian.mymusicplayerdemo.bean.Song;
import com.duanlian.mymusicplayerdemo.utils.MusicUtils; 

import java.util.ArrayList;
import java.util.List; 

public class MainActivity extends AppCompatActivity { 

 private ListView mListView;
 private List<Song> list;
 private MyAdapter adapter; 

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  initView();
 } 

 /**
  * 初始化view
  */
 private void initView() {
   mListView = (ListView) findViewById(R.id.main_listview);
  list = new ArrayList<>();
  //把扫描到的音乐赋值给list
   list = MusicUtils.getMusicData(this);
  adapter = new MyAdapter(this,list);
  mListView.setAdapter(adapter);
 }
} 

是不是很简单,就定义一个ListView并且绑定Adapter,接下来就Adapter得编写:
[html] view plain copy
package com.duanlian.mymusicplayerdemo.adapter; 

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView; 

import com.duanlian.mymusicplayerdemo.MainActivity;
import com.duanlian.mymusicplayerdemo.R;
import com.duanlian.mymusicplayerdemo.bean.Song;
import com.duanlian.mymusicplayerdemo.utils.MusicUtils; 

import java.util.List; 

public class MyAdapter extends BaseAdapter {
 private Context context;
 private List<Song> list;
 public MyAdapter(MainActivity mainActivity, List<Song> list) {
  this.context = mainActivity;
  this.list = list; 

 } 

 @Override
 public int getCount() {
  return list.size();
 } 

 @Override
 public Object getItem(int i) {
  return list.get(i);
 } 

 @Override
 public long getItemId(int i) {
  return i;
 } 

 @Override
 public View getView(int i, View view, ViewGroup viewGroup) {
  ViewHolder holder = null;
  if (view == null) {
   holder = new ViewHolder();
   //引入布局
   view = View.inflate(context, R.layout.item_music_listview, null);
   //实例化对象
   holder.song = (TextView) view.findViewById(R.id.item_mymusic_song);
   holder.singer = (TextView) view.findViewById(R.id.item_mymusic_singer);
   holder.duration = (TextView) view.findViewById(R.id.item_mymusic_duration);
   holder.position = (TextView) view.findViewById(R.id.item_mymusic_postion);
   view.setTag(holder);
  } else {
   holder = (ViewHolder) view.getTag();
  }
  //给控件赋值
  holder.song.setText(list.get(i).song.toString());
  holder.singer.setText(list.get(i).singer.toString());
  //时间需要转换一下
  int duration = list.get(i).duration;
  String time = MusicUtils.formatTime(duration);
  holder.duration.setText(time);
  holder.position.setText(i+1+""); 

  return view;
 }
 class ViewHolder{
  TextView song;//歌曲名
  TextView singer;//歌手
  TextView duration;//时长
  TextView position;//序号 

 } 

}

ListView都需要一个item,具体代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="110dp"
 android:orientation="horizontal"
 android:gravity="center_vertical"
 android:padding="5dp">
 <TextView
  android:id="@+id/item_mymusic_postion"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_margin="10dp"
  android:text="1"
  android:gravity="center"
  android:textColor="#0d0c0c"
  android:textSize="18sp" /> 

 <RelativeLayout
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_marginLeft="20dp"
  > 

  <TextView
   android:id="@+id/item_mymusic_song"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:text="歌曲名"
   android:textColor="#0d0c0c"
   android:textSize="20dp" /> 

  <TextView
   android:id="@+id/item_mymusic_singer"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_below="@+id/item_mymusic_song"
   android:text="歌手"
   android:textColor="#0d0c0c"
   android:textSize="15sp" /> 

  <TextView
   android:id="@+id/item_mymusic_duration"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_below="@+id/item_mymusic_song"
   android:layout_marginLeft="15dp"
   android:textColor="#0d0c0c"
   android:layout_toRightOf="@+id/item_mymusic_singer"
   android:text="时间"
   android:textSize="15sp" />
 </RelativeLayout> 

</LinearLayout>

运行效果:

demo下载地址:音乐播放器

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 实例解析使用Java实现基本的音频播放器的编写要点

    Java音频播放,因为必须依赖到本地环境,所以JAVA在音频处理方面优势不大,或者说打从Java体系开发时就没太多的考虑音频播放因素,要知道最早的Java 1.1版本中,没有后来的javax.sound包,音频只能通过Applet包调取-- 遗憾的是,在图形程序开发中,我们的程序却又难免要使用到背景音乐.效果音等配合图像操作,哎,这实在是Sun大神给我们开的一个不打不小的玩笑.万幸后来Sun大神开眼,提供了javax.sound包,才解救我们于水深火热当中~ 但是继之而来的问题是,在javax.

  • Java swing仿酷狗音乐播放器

    今天给大家介绍下用Java swing开发一款音乐播放器,高仿酷狗音乐播放器,完整源码地址在最下方,本文只列出部分源码,因为源码很多,全部贴不下,下面还是老规矩.来看看运行结果: 下面我们来看看代码: 首先看一下主窗口的实现代码: package com.baiting; import java.awt.Dimension; import java.awt.Toolkit; import com.baiting.menu.CloseWindow; /** * 窗口 * @author lmq *

  • android多媒体音乐(MediaPlayer)播放器制作代码

    本文实例为大家分享了android多媒体音乐播放器的具体实现代码,供大家参考,具体内容如下 首先,在AndroidManifest.xml中配置权限 <!-- 读取手机中的音乐 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 注释:Android多媒体音乐的几种来源 1.在andriod的应用中 MediaPlayer.create(this, R.r

  • java音乐播放器编写源码

    本文实例为大家分享了java音乐播放器的具体代码,供大家参考,具体内容如下 源码: package baidu; import java.awt.*; import java.awt.event.*; import java.io.*; import java.util.*; import javax.swing.*; import javax.media.bean.playerbean.*; //这个包要用到JMF public class MP3 extends JFrame impleme

  • java音乐播放器实现代码

    本文实例为大家分享了java音乐播放器的具体代码,供大家参考,具体内容如下 这个是源码结构介绍 这个是界面,有点简陋,见笑了,但是基本上的东西都有了,没办法,没有美工的程序写的界面 直接上源代码Player.java package com.service; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Random; import javax.sound

  • 简单实现Android本地音乐播放器

    音乐播放需要调用service,在此,只是简单梳理播放流程. public class PlayMusicService extends Service { //绑定服务 调用服务的方法. @Override public IBinder onBind(Intent intent) { return null; } } <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:to

  • Android音乐播放器制作 点击歌曲实现播放(二)

    上次我们实现了把手机里的音频扫描到,然后放在list集合里面,用ListView展示在手机界面上,如果没有看过的可以去看看本人的博客:Android音乐播放器制作(一)扫描本地音乐显示在手机上 这次是在上一次的基础上直接继续写代码,几行代码实现点击那首歌曲就播放那首歌曲,系统已经提供了播放音频的对象了,直接用就可以了,具体如下: 1.声明一个MediaPlayer private MediaPlayer mediaPlayer;//播放音频的 2.实例化 //初始化 mediaPlayer =

  • 教你轻松制作java视频播放器

    前言 跳过废话,直接看正文 当年入坑Java是因为它的跨平台优势.那时我认为,"编写一次,处处运行."这听上去多么牛逼,应该是所有语言发展的终极之道,java势必会一统天下. 然而事实证明,那时的我还是太年轻. 正所谓鱼和熊掌不可兼得,若要享受跨平台带来的方便,便不可避免地要接受性能上的不足.事实上,java一直在致力于提高虚拟机的性能(JIT等技术),但面对对实时计算性能要求很高或涉及到用硬件优化的任务(视频的硬件编码.解码)时,仍远远比不上c或c++.因此,很少能够看到有人用jav

  • Android音乐播放器制作 加入控制台(三)

    Android音乐播放器的运行效果 这篇博客还是接着上一篇Android音乐播放器制作写的,没看过的可以去看看. 其中这个效果(圆形ImageView和控件匀速旋转): 我前面的博客中写到过我就不一一细说了: 图片变成圆形:android图片处理,让图片变成圆形 旋转:android图片处理:让图片一直匀速旋转 文字跑马灯:TextView的跑马灯效果以及TextView的一些属性 具体实现 首先是布局文件中添加了如下代码,这些代码就是实现控制台的,给整体设置了一个invisible,为了让他点

  • 教你轻松制作java音乐播放器

    一.音乐播放器的实现原理 Javase的多媒体功能很弱,所以有一个专门处理多媒体的插件叫JMF,JMF提供的模型可大致分为七类 * 数据源(Data source) * 截取设备(Capture Device,包括视频和音频截取设备) * 播放器(Player) * 处理器(Processor) * 数据池(DataSink) * 数据格式(Format) * 管理器(Manager) 而我所做的这个音乐播放器MyMusicPlayer(这是我创建的类名)正是调用了JMF中的Player类来实现

随机推荐