安卓 简易版音乐播放器——初稿
16lz
2021-01-26
目录
- main.xml
- bottom_bar.xml
- item.xml
- java代码
main.xml
<?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="match_parent" android:orientation="vertical"> <FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="match_parent"/> <include layout="@layout/bottom_bar" android:layout_width="match_parent" android:layout_height="57dp" android:layout_gravity="bottom"/> </FrameLayout></LinearLayout>
bottom_bar.xml
<?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="57dp" android:orientation="vertical" android:id="@+id/bottom" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:gravity="center_vertical" android:orientation="horizontal" android:paddingLeft="10dp" android:paddingRight="10dp"> <ImageView android:id="@+id/imageView" android:layout_width="45dp" android:layout_height="45dp" android:scaleType="fitXY" android:contentDescription="@null" android:src="@drawable/default_cover"/> <LinearLayout android:layout_width="60dp" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:orientation="vertical"> <TextView android:id="@+id/music_title" style="@style/AppTheme.Text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="end" android:singleLine="true" android:text="无音乐" android:textSize="16sp" /> <TextView android:id="@+id/music_artist" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="end" android:singleLine="true" android:textSize="12sp" /> </LinearLayout> <ImageView android:layout_width="wrap_content" android:layout_height="57dp" android:id="@+id/play" android:contentDescription="@null" android:src="@drawable/ic_play_bar_btn_play"/> <ImageView android:layout_width="wrap_content" android:layout_height="57dp" android:id="@+id/next" android:contentDescription="@null" android:src="@drawable/ic_play_bar_btn_next"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/playList" android:contentDescription="@null" android:src="@drawable/ic_play_bar_btn_playlist"/> </LinearLayout> <SeekBar android:layout_width="match_parent" android:layout_height="2dp" android:layout_gravity="bottom"/></LinearLayout>
item.xml
<?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="57dp" android:orientation="vertical"> <TextView android:id="@+id/music" android:layout_width="match_parent" android:layout_height="wrap_content" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="left" android:ems="15" android:id="@+id/artist"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/duration"/> </LinearLayout></LinearLayout>
java代码
package com.zzu.wangyujiao.mt41056;import androidx.appcompat.app.AppCompatActivity;import androidx.fragment.app.Fragment;import androidx.viewpager.widget.ViewPager;import android.content.ContentResolver;import android.content.Context;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.media.MediaPlayer;import android.net.Uri;import android.os.Bundle;import android.provider.BaseColumns;import android.provider.ContactsContract;import android.provider.MediaStore;import android.view.ContextMenu;import android.view.View;import android.widget.Adapter;import android.widget.AdapterView;import android.widget.FrameLayout;import android.widget.ImageView;import android.widget.LinearLayout;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.SimpleCursorAdapter;import android.widget.TextView;import android.widget.Toast;import org.w3c.dom.Text;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.security.PrivateKey;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity { private ImageView play; private ImageView next; private ImageView playList; private TextView music_title; private TextView music_artist; private ImageView imageView; private ListView listView; private LinearLayout bottom; private TextView artist; private LocalMusicFragment localMusicFragment; private static List<Music> musicList=new ArrayList<>(); private static Cursor cursor; private MediaPlayer mediaPlayer; private static int state=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); play=findViewById(R.id.play); next=findViewById(R.id.next); playList=findViewById(R.id.playList); music_artist=findViewById(R.id.music_artist); music_title=findViewById(R.id.music_title); imageView=findViewById(R.id.imageView); listView=findViewById(R.id.listView); bottom=findViewById(R.id.bottom); artist=findViewById(R.id.artist); scanMusic(this); SimpleCursorAdapter adapter=new SimpleCursorAdapter(this,R.layout.musiclist,cursor,new String[]{MediaStore.Audio.AudioColumns.TITLE,MediaStore.Audio.AudioColumns.ARTIST,MediaStore.Audio.AudioColumns.DURATION},new int[]{R.id.music,R.id.artist,R.id.duration}); listView.setAdapter(adapter); bottom.setEnabled(false); play.setEnabled(false); next.setEnabled(false); mediaPlayer=new MediaPlayer(); View.OnClickListener listener=new View.OnClickListener() { @Override public void onClick(View v) { switch (v.getId()){ case R.id.bottom: Toast.makeText(MainActivity.this,"this is liatview",Toast.LENGTH_SHORT).show(); break; case R.id.play: if(mediaPlayer.isPlaying()){ mediaPlayer.pause(); play.setImageResource(R.drawable.ic_play_bar_btn_play); }else{ mediaPlayer.start(); play.setImageResource(R.drawable.ic_play_bar_btn_pause); } Toast.makeText(MainActivity.this,"this is play",Toast.LENGTH_SHORT).show(); break; case R.id.next: break;// case R.id.prev:// break; } } }; //为listView添加监控 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { state=position; mediaPlayer.stop(); mediaPlayer=null; mediaPlayer=new MediaPlayer(); Toast.makeText(MainActivity.this,musicList.get(position).path,Toast.LENGTH_SHORT).show(); try { mediaPlayer.setDataSource(musicList.get(position).path); mediaPlayer.prepare(); mediaPlayer.start(); } catch (IOException e) { e.printStackTrace(); } music_title.setText(musicList.get(position).title); music_artist.setText(musicList.get(position).artist); play.setImageResource(R.drawable.ic_play_bar_btn_pause); play.setEnabled(true); next.setEnabled(true); imageView.setImageBitmap(getAlbumArt(musicList.get(position).albumId)); } }); bottom.setOnClickListener(listener); play.setOnClickListener(listener); next.setOnClickListener(listener); } private String getAlbum(long albumId){ String mUriAlbums="content://media/external/audio/albums"; String[] projection=new String[]{"album_art"}; Cursor cur=MainActivity.this.getContentResolver().query(Uri.parse(mUriAlbums+"/"+Long.toString(albumId)),projection,null,null,null); String album_art=null; if (cur.getCount()>0&&cur.getColumnCount()>0){ cur.moveToNext(); album_art=cur.getString(0); } cur.close(); return album_art; } private Bitmap getAlbumArt(long albumId) { String mUriAlbums="content://media/external/audio/albums"; String[] projection=new String[]{"album_art"}; Cursor cur=MainActivity.this.getContentResolver().query(Uri.parse(mUriAlbums+"/"+Long.toString(albumId)),projection,null,null,null); String album_art=null; if (cur.getCount()>0&&cur.getColumnCount()>0){ cur.moveToNext(); album_art=cur.getString(0); } cur.close(); Bitmap bm=null; if (album_art!=null){ bm=BitmapFactory.decodeFile(album_art); }else{ bm=BitmapFactory.decodeResource(getResources(),R.drawable.default_cover); } return bm; } public static void scanMusic(Context context){ musicList.clear(); cursor=context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, new String[]{BaseColumns._ID, MediaStore.Audio.AudioColumns.IS_MUSIC, MediaStore.Audio.AudioColumns.TITLE, MediaStore.Audio.AudioColumns.ARTIST, MediaStore.Audio.AudioColumns.ALBUM, MediaStore.Audio.AudioColumns.ALBUM_ID, MediaStore.Audio.AudioColumns.DATA, MediaStore.Audio.AudioColumns.DISPLAY_NAME, MediaStore.Audio.AudioColumns.SIZE, MediaStore.Audio.AudioColumns.DURATION},null,null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER); if (cursor==null){ return; } while(cursor.moveToNext()){ //是否为音乐 int isMusic=cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC)); if(isMusic==0){ continue; } long id=cursor.getLong(cursor.getColumnIndex(BaseColumns._ID)); String title = cursor.getString((cursor.getColumnIndex(MediaStore.Audio.AudioColumns.TITLE))); // 艺术家 String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.AudioColumns.ARTIST)); // 专辑 String album = cursor.getString((cursor.getColumnIndex(MediaStore.Audio.AudioColumns.ALBUM))); // 专辑封面id,根据该id可以获得专辑封面图片 long albumId = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.AudioColumns.ALBUM_ID)); // 持续时间 long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION)); // 音乐文件路径 String path = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.AudioColumns.DATA)); // 音乐文件名 String fileName = cursor.getString((cursor.getColumnIndex(MediaStore.Audio.AudioColumns.DISPLAY_NAME))); // 音乐文件大小 long fileSize = cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE)); Music music = new Music(); music.setId(id); music.setTitle(title); music.setArtist(artist); music.setAlbum(album); music.setAlbumId(albumId); music.setDuration(duration); music.setPath(path); music.setFileName(fileName); music.setFileSize(fileSize); musicList.add(music); } }}
更多相关文章
- 播放raw中的音乐范例
- Android(安卓)应用界面开发笔记 Service
- Android(安卓)Service播放音乐
- Android音乐播放器【支持:速率调节,音调调节,采样率调节】
- Android(安卓)编程案例-本地音乐播放器源码及使用注意事项
- Android视频播放时停止后台运行的方法
- Android(安卓)4.0音乐问题
- Android前台服务 音乐播放器 前台服务
- android实现音乐播放器进度条效果