androdi Studio 51 mp3
发布日期:2021-06-24 15:21:33
浏览次数:4
分类:技术文章
本文共 11018 字,大约阅读时间需要 36 分钟。
第一步activity—main.xml第二步item-local-music.xml 第三步 权限 第四步 package com.example.mymusic02;import androidx.appcompat.app.AppCompatActivity;import androidx.recyclerview.widget.LinearLayoutManager;import androidx.recyclerview.widget.RecyclerView;import android.content.ContentResolver;import android.database.Cursor;import android.media.MediaParser;import android.media.MediaPlayer;import android.net.Uri;import android.os.Bundle;import android.provider.MediaStore;import android.view.View;import android.view.View.OnClickListener;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;public class MainActivity extends AppCompatActivity implements OnClickListener { ImageView nextIv,playIv,lastIv; TextView singerTv,songTv; RecyclerView musicRv; List mDatas; private LocalMusicAdater adapter; private int position; int currnetPalyPosition=-1; int currentPausePositionInSong=0; MediaPlayer mediaPlayer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); mediaPlayer=new MediaPlayer(); mDatas=new ArrayList<>();//z这里有两个选择 //创建适配器 adapter=new LocalMusicAdater(this,mDatas); musicRv.setAdapter(adapter); //s设置布局管理器 LinearLayoutManager layoutManager=new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false); musicRv.setLayoutManager(layoutManager); //加载本地数据源 loadLocalMusicData(); //设置点击监听事件 setEventListener(); } private void setEventListener() { adapter.setOnItemClickListener(new LocalMusicAdater.OnItemClickListener() { @Override public void OnItemClick(View view, int position) { currnetPalyPosition=position; LocalMusicBean musicBean=mDatas.get(position); playMusicInMusicBean(musicBean); } }); } public void playMusicInMusicBean(LocalMusicBean musicBean) { //she设置歌曲名 歌手名字 singerTv.setText(musicBean.getSinger()); songTv.setText(musicBean.getSong()); stopMusic(); //chongz重置多媒体播放器 mediaPlayer.reset(); try { mediaPlayer.setDataSource(musicBean.getPath()); palyMusic(); } catch (IOException e) { e.printStackTrace(); } } private void palyMusic() { if(mediaPlayer!=null&&!mediaPlayer.isPlaying()){ if(currentPausePositionInSong==0){ try { mediaPlayer.prepare(); mediaPlayer.start(); } catch (IOException e) { e.printStackTrace(); } }else { //zha站厅到 mediaPlayer.seekTo(currentPausePositionInSong); mediaPlayer.start(); } playIv.setImageResource(R.mipmap.icon_pause); } } private void pauseMusic() { if(mediaPlayer!=null&&mediaPlayer.isPlaying()){ currentPausePositionInSong=mediaPlayer.getCurrentPosition(); mediaPlayer.pause(); playIv.setImageResource(R.mipmap.icon_play); } } private void stopMusic() { if(mediaPlayer!=null){ currentPausePositionInSong=0; mediaPlayer.pause(); mediaPlayer.seekTo(0); mediaPlayer.stop(); playIv.setImageResource(R.mipmap.icon_play); } } @Override protected void onDestroy() { super.onDestroy(); stopMusic(); } private void loadLocalMusicData() { //加载本地Mp3 文件 // 获取contentResolver对象 ContentResolver resolver=getContentResolver(); //获取本地音乐存储urid Uri uri= MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; Cursor cursor=resolver.query(uri,null,null,null,null); int id=0; while(cursor.moveToNext()){ String song = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE)); String singer=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST)); String album=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM)); id++; String sid=String.valueOf(id); String path=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA)); long duration=cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)); SimpleDateFormat sdf=new SimpleDateFormat("mm:ss"); String time = sdf.format(new Date(duration)); LocalMusicBean bean=new LocalMusicBean(sid,song,singer,album,time,path); mDatas.add(bean); } adapter.notifyDataSetChanged(); } private void initView() { nextIv=findViewById(R.id.local_music_bottom_iv_next); playIv=findViewById(R.id.local_music_bottom_iv_play); lastIv=findViewById(R.id.local_music_bottom_iv_last); singerTv=findViewById(R.id.local_music_bottom_tv_singer); songTv=findViewById(R.id.local_music_bottom_tv_song); musicRv=findViewById(R.id.local_music_rv); nextIv.setOnClickListener(this); lastIv.setOnClickListener(this); playIv.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.local_music_bottom_iv_last: if(currnetPalyPosition==0){ Toast.makeText(this,"已经是第一首歌曲。",Toast.LENGTH_SHORT).show(); } currnetPalyPosition=currnetPalyPosition-1; LocalMusicBean lastBean=mDatas.get(currnetPalyPosition); playMusicInMusicBean(lastBean); break; case R.id.local_music_bottom_iv_next: if(currnetPalyPosition==mDatas.size()-1){ Toast.makeText(this,"next Music...",Toast.LENGTH_SHORT).show(); } currnetPalyPosition=currnetPalyPosition+1; LocalMusicBean nextBean=mDatas.get(currnetPalyPosition); playMusicInMusicBean(nextBean); break; case R.id.local_music_bottom_iv_play: if(currnetPalyPosition==-1){ Toast.makeText(this, "last Music...", Toast.LENGTH_SHORT).show(); return; } if(mediaPlayer.isPlaying()){ pauseMusic(); }else { palyMusic(); } break; } }}第五步LocalMusicAdater.javapackage com.example.mymusic02;import androidx.annotation.NonNull;import androidx.recyclerview.widget.RecyclerView;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;import java.util.List;class LocalMusicAdater extends RecyclerView.Adapter { Context context; List mDatas; OnItemClickListener onItemClickListener; public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.onItemClickListener=onItemClickListener; } public interface OnItemClickListener{ public void OnItemClick(View view,int position); } public LocalMusicAdater(Context context, List mDatas) { this.context = context; this.mDatas = mDatas; } @NonNull @Override public LocalMusicViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view= LayoutInflater.from(context).inflate(R.layout.item_local_music,parent,false); LocalMusicViewHolder holder=new LocalMusicViewHolder(view); return holder; } @Override public void onBindViewHolder(@NonNull LocalMusicViewHolder holder, final int position) { LocalMusicBean musicBean=mDatas.get(position); holder.idTv.setText(musicBean.getId()); holder.songTv.setText(musicBean.getSong()); holder.singerTv.setText(musicBean.getSinger()); holder.albumTv.setText(musicBean.getAlbum()); holder.timeTv.setText(musicBean.getDuration()); holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onItemClickListener.OnItemClick(view,position); } }); } @Override public int getItemCount() { return mDatas.size(); } class LocalMusicViewHolder extends RecyclerView.ViewHolder{ TextView idTv,songTv,singerTv,albumTv,timeTv; public LocalMusicViewHolder(@NonNull View itemView) { super(itemView); idTv=itemView.findViewById(R.id.item_local_music_num); songTv=itemView.findViewById(R.id.item_local_music_song); singerTv=itemView.findViewById(R.id.item_local_music_singer); albumTv=itemView.findViewById(R.id.item_local_music_album); timeTv=itemView.findViewById(R.id.item_local_music_durtion); } }}第六步 LocalMusicBean.javapackage com.example.mymusic02;public class LocalMusicBean { private String id; private String song; private String singer; private String album; private String duration; private String path; public LocalMusicBean() { } public LocalMusicBean(String id, String song, String singer, String album, String duration, String path) { this.id = id; this.song = song; this.singer = singer; this.album = album; this.duration = duration; this.path = path; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getSong() { return song; } public void setSong(String song) { this.song = song; } public String getSinger() { return singer; } public void setSinger(String singer) { this.singer = singer; } public String getAlbum() { return album; } public void setAlbum(String album) { this.album = album; } public String getDuration() { return duration; } public void setDuration(String duration) { this.duration = duration; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } ![请添加图片描述](https://img-blog.csdnimg.cn/20200807023411442.png)
4444
转载地址:https://blog.csdn.net/weixin_33595571/article/details/107852230 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月08日 05时32分33秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
AcWing - 区间和(离散化&前缀和)
2019-04-28
AcWing - 区间合并(贪心)
2019-04-28
AcWing - 单链表(模拟)
2019-04-28
AcWing - 双链表(模拟)
2019-04-28
AcWing - KMP字符串(KMP)
2019-04-28
来一个总结吧
2019-04-28
有趣的句子
2019-04-28
每天一道 python 面试题 - Python中的元类(metaclass) 详细版本
2019-04-28
Scrapy(6)Item loader 加载器详解
2019-04-28
每日一道python面试题 - Python的实例,类和静态方法揭秘
2019-04-28
今日金融词汇---新股新债前面的N,是什么?
2019-04-28
每日一道python面试题 - Python的实例,类和静态方法揭秘
2019-04-28
原创专辑来了
2019-04-28
好好做好你喜欢做的事情,并且把它做好
2019-04-28
反馈不足
2019-04-28
人生永远没有太晚的开始
2019-04-28
python 周日福利来了
2019-04-28
状态模式
2019-04-28
跳表SkipList
2019-04-28
跳跃表(Skip list)原理与java实现
2019-04-28