package com.music.utilbean;
import java.io.*;
import java.util.ArrayList;
import android.content.Intent;
import android.media.MediaScannerConnection;
import android.os.Environment;
import android.util.Log;
import cn.hutool.json.JSONUtil;
import com.music.kuwo.R;
import android.R.integer;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapFactory.Options;
import android.net.Uri;
import android.os.ParcelFileDescriptor;
import android.provider.MediaStore;
public class MediaUtils {
//获取专辑封面的URLcontent://media/audio/albumart
private static final Uri albumArtUri=Uri.parse("content://media/external/audio/albumart");
public static Mp3Info getMp3Info(Context context,Long _id) {//通过id获取单个音乐文件信息
Cursor cursor=context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,
MediaStore.Audio.Media._ID+"="+_id, null,
MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
Mp3Info mp3Info=null;
// MediaStore,系统检测所有媒体,包括.mp3文件等等
if(cursor.moveToNext()){
mp3Info=new Mp3Info();
Long id=cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media._ID));
String title=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
String artist=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
String album=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
Long albumId=cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
Long duration=cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
Long size=cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE));
String url=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
int isMusic=cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));
if(isMusic!=0){
mp3Info.setId(id);
mp3Info.setTitle(title);
mp3Info.setArtist(artist);
mp3Info.setAlbum(album);
mp3Info.setAlbumId(albumId);
mp3Info.setDuration(duration);
mp3Info.setSize(size);
mp3Info.setUrl(url);
}
}
cursor.close();
return mp3Info;
}
//获取音乐文件集合
public static ArrayList<Mp3Info> getMp3Infos(Context context) {
Cursor cursor=context.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,
MediaStore.Audio.Media.DURATION+">=60000", null,
MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
ArrayList<Mp3Info>mp3Infos=new ArrayList<Mp3Info>();
for(int i=0;i<cursor.getCount();i++){
cursor.moveToNext();
Mp3Info mp3Info=new Mp3Info();
Long id=cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media._ID));
String title=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
String artist=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
String album=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
Long albumId=cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM_ID));
Long duration=cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
Long size=cursor.getLong(cursor.getColumnIndex(MediaStore.Audio.Media.SIZE));
String url=cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
int isMusic=cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC));
if(isMusic!=0){
mp3Info.setId(id);
mp3Info.setTitle(title);
mp3Info.setArtist(artist);
mp3Info.setAlbum(album);
mp3Info.setAlbumId(albumId);
mp3Info.setDuration(duration);
mp3Info.setSize(size);
mp3Info.setUrl(url);
mp3Infos.add(mp3Info);
}
}
cursor.close();
Log.i("mp3Infos", JSONUtil.toJsonStr(mp3Infos));
return mp3Infos;
}
//毫秒转换成分:秒,格式化时间
public static String formatTime(Long time) {
String min=time/(1000*60)+"";
String sec=time%(1000*60)+"";
if(min.length()<2){
min="0"+time/(1000*60)+"";
}else {
min=time/(1000*60)+"";
}
if(sec.length()==4){
sec="0"+(time%(1000*60))+"";
}else if (sec.length()==3) {
sec="00"+(time%(1000*60))+"";
}else if (sec.length()==2) {
sec="000"+(time%(1000*60))+"";
}else if(sec.length()==1){
sec="0000"+(time%(1000*60))+"";
}
return min+":"+sec.trim().substring(0, 2);
}
/**
* 获取默认专辑图片
* @param context
* @return
*/
public static Bitmap getDefaultArtwork(Context context,boolean small) {
Options opts = new Options();
opts.inPreferredConfig = Bitmap.Config.RGB_565;
if(small){ //返回小图片
return BitmapFactory.decodeStream(context.getResources().openRawResource(R.drawable.list_cd), null, opts);
}
return BitmapFactory.decodeStream(context.getResources().openRawResource(R.drawable.default_play_activity_bg), null, opts);
}
/**
* 从文件当中获取专辑封面位图
* @param context
* @param songid
* @param albumid
* @return
*/
private static Bitmap getArtworkFromFile(Context context, long songid, long albumid){
Bitmap bm = null;
if(albumid < 0 && songid < 0) {
throw new IllegalArgumentException("Must specify an album or a song id");
}
try {
Options options = new Options();
FileDescriptor fd = null;
if(albumid < 0){
Uri uri = Uri.parse("content://media/external/audio/media/"
+ songid + "/albumart");
ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(uri, "r");
if(pfd != null) {
fd = pfd.getFileDescriptor();
}
} else {
Uri uri = ContentUris.withAppendedId(albumArtUri, albumid);
ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(uri, "r");
if(pfd != null) {
fd = pfd.getFileDescriptor();
}
}
options.inSampleSize = 1;
// 只进行大小判断
options.inJustDecodeBounds = true;
// 调用此方法得到options得到图片大小
BitmapFactory.decodeFileDescriptor(fd, null, options);
// 我们的目标是在800pixel的画面上显示
// 所以需要调用computeSampleSize得到图片缩放的比例
options.inSampleSize = 100;
// 我们得到了缩放的比例,现在开始正式读入Bitmap数据
options.inJustDecodeBounds = false;
options.inDither = false;
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
//根据options参数,减少所需要的内存
bm = BitmapFactory.decodeFileDescriptor(fd, null, options);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return bm;
}
/**
* 获取专辑封面位图对象
* @param context
* @param song_id
* @param album_id
* @param allowdefalut
* @return
*/
public static Bitmap getArtwork(Context context, long song_id, long album_id, boolean allowdefalut, boolean small){
if(album_id < 0) {
if(song_id < 0) {
Bitmap bm = getArtworkFromFile(context, song_id, -1);
if(bm != null) {
return bm;
}
}
if(allowdefalut) {
return getDefaultArtwork(context, small);
}
return null;
}
ContentResolver res = context.getContentResolver();
Uri uri = ContentUris.withAppendedId(albumArtUri, album_id);
if(uri != null) {
InputStream in = null;
try {
in = res.openInputStream(uri);
Options options = new Options();
//先制定原始大小
options.inSampleSize = 1;
//只进行大小判断
options.inJustDecodeBounds = true;
//调用此方法得到options得到图片的大小
BitmapFactory.decodeStream(in, null, options);
没有合适的资源?快使用搜索试试~ 我知道了~
基于安卓开发简单的音乐播放器,有音乐收藏,音乐播放,歌词滚动,音乐搜索和下载.zip
共165个文件
xml:30个
png:29个
java:29个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 135 浏览量
2021-12-15
17:10:58
上传
评论
收藏 12.93MB ZIP 举报
温馨提示
自己学习安卓的时候写的项目:基于安卓开发简单的音乐播放器,有音乐收藏,音乐播放,歌词滚动,音乐搜索和下载
资源推荐
资源详情
资源评论
收起资源包目录
基于安卓开发简单的音乐播放器,有音乐收藏,音乐播放,歌词滚动,音乐搜索和下载.zip (165个子文件)
$PROJECT_FILE$ 364B
app-debug.apk 3.49MB
app-release.apk 2.95MB
1_app-release.apk 2.78MB
DownLoadUtil.java.bak 9KB
gradlew.bat 2KB
last-build.bin 1B
bootstrap.css 114KB
changyan2.css 108KB
changyan2.css 108KB
changyan2-floatCbox-frame.css 22KB
default.css 16KB
changyan2-floatCbox.css 5KB
template.css 4KB
upload-img.css 721B
reset.css 698B
09b925eb-e68a-4d4b-a706-003925e82254.css 161B
student.do 68B
pic42_null.gif 830B
adx.gif 49B
adx.gif 49B
build.gradle 2KB
build.gradle 558B
settings.gradle 39B
gradlew 5KB
scem_002.htm 42KB
a.htm 5KB
scem.htm 3KB
o.htm 2KB
fp.htm 175B
fp_002.htm 175B
marsong.html 103KB
app.iml 14KB
kuwo-app.iml 14KB
hutool-all-4.5.15.jar 1.4MB
fastjson-1.2.31.jar 452KB
okhttp-2.7.4.jar 323KB
jsoup-1.7.2.jar 287KB
okio-1.6.0.jar 64KB
gradle-wrapper.jar 53KB
MediaUtils.java 10KB
MyMusicListFragment.java 9KB
PlayActivity.java 8KB
UploadDownloadUtil.java 6KB
SearchUtil.java 6KB
MyMusicListAdapter.java 6KB
PlayService.java 5KB
DownLoadUtil.java 5KB
Tab1Activity.java 4KB
LrcView.java 4KB
NetBDMusicFragment.java 4KB
LrcProcess.java 4KB
Tab3Activity.java 4KB
BaseActivity.java 4KB
DownLoadMusicFragment.java 3KB
NetMusicListAdapter.java 2KB
Tab2Activity.java 2KB
MediaScanner.java 2KB
Mp3Info.java 1KB
MainActivity.java 1KB
Contant.java 1KB
DBhelper.java 1004B
StartActivity.java 985B
KugouSong.java 862B
SearchResult.java 754B
KuwoApplication.java 591B
LrcContent.java 480B
ReceiveBroadCast.java 348B
BuildConfig.java 256B
kuwo.jks 2KB
start_background.jpg 121KB
music.jpg 19KB
background.jpg 16KB
vcode.jpg 2KB
app-build.js 678KB
c.js 112KB
jquery.js 94KB
wh.js 70KB
bootstrap.js 35KB
closefeedback.js 31KB
h.js 23KB
adapter.js 12KB
version.js 11KB
render-pc.js 8KB
sea.js 7KB
main.js 6KB
oojs.js 6KB
version-v3.js 3KB
ac.js 3KB
cyrpTciiX_002.js 3KB
cyrpTciiX.js 3KB
anticheat.js 3KB
changyan.js 2KB
cookie_002.js 76B
cookie.js 76B
output.json 234B
output.json 226B
fileHashes.lock 17B
20150328_013034.mp4 1.5MB
default_play_activity_bg.png 95KB
共 165 条
- 1
- 2
资源评论
- A9979hhh2024-05-20这个资源对我启发很大,受益匪浅,学到了很多,谢谢分享~
我慢慢地也过来了
- 粉丝: 6446
- 资源: 3993
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功