android中音乐如何网络获取专辑封面图片

android中音乐如何网络获取专辑封面图片,第1张

该为使用如下代码解析得到:

参考源码中,音乐目录:

packages/apps/Music/src/com/android/music/MusicUtilsjava中函数:getArtwork(context, song_id, album_id, true)

public static Bitmap getArtwork(Context context, long song_id, long album_id,

boolean allowdefault) {

if (album_id < 0) {

// This is something that is not in the database, so get the album art directly

// from the file

if (song_id >= 0) {

Bitmap bm = getArtworkFromFile(context, song_id, -1);

if (bm != null) {

return bm;

}

}

if (allowdefault) {

return getDefaultArtwork(context);

}

return null;

}

ContentResolver res = contextgetContentResolver();

Uri uri = ContentUriswithAppendedId(sArtworkUri, album_id);

if (uri != null) {

InputStream in = null;

try {

in = resopenInputStream(uri);

return BitmapFactorydecodeStream(in, null, sBitmapOptions);

} catch (FileNotFoundException ex) {

// The album art thumbnail does not actually exist Maybe the user deleted it, or

// maybe it never existed to begin with

Bitmap bm = getArtworkFromFile(context, song_id, album_id);

if (bm != null) {

if (bmgetConfig() == null) {

bm = bmcopy(BitmapConfigRGB_565, false);

if (bm == null && allowdefault) {

return getDefaultArtwork(context);

}

}

} else if (allowdefault) {

bm = getDefaultArtwork(context);

}

return bm;

} finally {

try {

if (in != null) {

inclose();

}

} catch (IOException ex) {

}

}

}

return null;

}

private static Bitmap getArtworkFromFile(Context context, long songid, long albumid) {

Bitmap bm = null;

byte [] art = null;

String path = null;

if (albumid < 0 && songid < 0) {

throw new IllegalArgumentException("Must specify an album or a song id");

}

try {

if (albumid < 0) {

Uri uri = Uriparse("content://media/external/audio/media/" + songid + "/albumart");

ParcelFileDescriptor pfd = contextgetContentResolver()openFileDescriptor(uri, "r");

if (pfd != null) {

FileDescriptor fd = pfdgetFileDescriptor();

bm = BitmapFactorydecodeFileDescriptor(fd);

}

} else {

Uri uri = ContentUriswithAppendedId(sArtworkUri, albumid);

ParcelFileDescriptor pfd = contextgetContentResolver()openFileDescriptor(uri, "r");

if (pfd != null) {

FileDescriptor fd = pfdgetFileDescriptor();

bm = BitmapFactorydecodeFileDescriptor(fd);

}

}

} catch (FileNotFoundException ex) {

}

if (bm != null) {

mCachedBit = bm;

}

return bm;

}

private static Bitmap getDefaultArtwork(Context context) {

BitmapFactoryOptions opts = new BitmapFactoryOptions();

optsinPreferredConfig = BitmapConfigRGB_565;

return BitmapFactorydecodeStream(

contextgetResources()openRawResource(Rdrawableplay_img_default), null, opts);

}

private static final Uri sArtworkUri = Uriparse("content://media/external/audio/albumart");

private static final BitmapFactoryOptions sBitmapOptions = new BitmapFactoryOptions();

private static Bitmap mCachedBit = null;

获取cursor:

myCur = getContentResolver()query(

MediaStoreAudioMediaEXTERNAL_CONTENT_URI,

new String[] { MediaStoreAudioMediaTITLE,

MediaStoreAudioMediaDURATION,

MediaStoreAudioMediaARTIST,

MediaStoreAudioMedia_ID,

MediaStoreAudioMediaALBUM,

MediaStoreAudioMediaDISPLAY_NAME,

MediaStoreAudioMediaDATA,

MediaStoreAudioMediaALBUM_ID}, null,null, null);

myCurmoveToPosition(position);

设置专辑封面:

long songid = myCurgetLong(3);

long albumid = myCurgetLong(7);

Bitmap bm = MusicUtilsgetArtwork(this, songid, albumid,true);

if(bm != null){

Logd(TAG,"bm is not null==========================");

playImgsetImageBitmap(bm);

}else{

Logd(TAG,"bm is null============================");

}

把文件放在res/raw下,程序运行时把它释放到指定目录,代码如下:(供楼主参考)

private final String DATABASE_PATH = androidosEnvironmentgetExternalStorageDirectory()getAbsolutePath() + "/db_exam";

private final String DATABASE_FILENAME = "teldb";

public void extractDBFileFromRes(){

try {

String dbFileName = DATABASE_PATH + "/" + DATABASE_FILENAME;

File dir = new File(DATABASE_PATH);

if (!direxists()){

dirmkdir();

Logi("SQLite", "dir made:" + DATABASE_PATH);

} else {

Logi("SQLite", "dir exist:" + DATABASE_PATH);

}

try {

//如果数据库已经在SD卡的目录下存在,那么不需要重新创建,否则创建文件,并拷贝/res/raw下面的数据库文件

if (!(new File(dbFileName)exists())){

Logi("SQLite", dbFileName + ":file not exist");

//res/raw数据库作为输出流

InputStream inputStream = thisgetResources()openRawResource(Rrawtel);

//测试

int size = inputStreamavailable();

Logi("SQLite", "DATABASE_SIZE:" + 1);

Logi("SQLite", "count:" + 0);

//用于存放数据库信息的数据流

FileOutputStream fileOutputStream = new FileOutputStream(dbFileName);

byte[] buffer = new byte[8192];

int count = 0;

Logi("SQLite", "count:" + count);

//把数据写入SD卡目录下

while ((count = inputStreamread(buffer)) > 0 ) {

fileOutputStreamwrite(buffer, 0, count);

}

fileOutputStreamflush();

fileOutputStreamclose();

inputStreamclose();

}

} catch (FileNotFoundException e) {

Loge("Database", "File not found");

eprintStackTrace();

}

} catch (IOException e) {

Loge("Database", "IO exception");

eprintStackTrace();

}

}

通过MediaPlayer 的 getDuration() 可以获取MP3的播放时长

或者String[] mCursorCols = new String[] { MediaStoreAudioMedia_ID,

MediaStoreAudioMediaARTIST, MediaStoreAudioMediaALBUM,

MediaStoreAudioMediaDURATION };其中MediaStoreAudioMediaDURATION 就是获得时间的

Android系统会自动把添加到SD卡上的歌曲添加到一个SQLite数据库里 我们要做的就是把歌曲的信息从这个数据库里查询出来

查询SD卡上的mp3歌曲信息

Cursor mAudioCursor = thisgetContentResolver()query(

MediaStoreAudioMediaEXTERNAL_CONTENT_URI,

null,// 字段 没有字段 就是查询所有信息 相当于SQL语句中的 “ ”

null, // 查询条件

null, // 条件的对应的参数

MediaStoreAudioAudioColumnsTITLE);// 排序方式

// 循环输出歌曲的信息

List<Map<String, Object>> mListData = new ArrayList<Map<String, Object>>();

for (int i = 0; i < mAudioCursorgetCount(); i++) {

mAudioCursormoveToNext();

// 找到歌曲标题和总时间对应的列索引

int indexTitle = mAudioCursor

getColumnIndex(MediaStoreAudioAudioColumnsTITLE);//歌名

int indexARTIST = mAudioCursor

getColumnIndex(MediaStoreAudioAudioColumnsARTIST);//艺术家

int indexALBUM = mAudioCursor

getColumnIndex(MediaStoreAudioAudioColumnsALBUM);//专辑

String strTitle = mAudioCursorgetString(indexTitle);

String strARTIST = mAudioCursorgetString(indexARTIST);

String strALBUM = mAudioCursorgetString(indexALBUM);

HashMap<String, Object> nowMap = new HashMap<String, Object>();

nowMapput("SongName", strTitle + "---" + strARTIST

+ "---" + strALBUM);

mListDataadd(nowMap);

}

加载到ListView里就很简单了

android MediaPlayer类可以得到播放档案位元速率不

MediaPlayer 能不能得到我不知道,但是android系统可以帮你解析到。

方法:在目录data/data/anroidcontentprovidersmedia 这个包里面有一个数据库,是关于各种多媒体的,然后里面有个表,有全部音乐档案(android能识别的格式)的相关属性,比如歌曲名称,歌手,歌曲路径,还有歌曲时间。当然也有位元速率的。你可以利用这个。可以用contentProvider去查询这张表,表的Url是:MediaStoreAudioMediaEXTERNAL_CONTENT_URI这个你可去网上查一下,先关资料多的是。

Cursor cursor = getContentResolver()query(

MediaStoreAudioMediaEXTERNAL_CONTENT_URI, null,

"duration > 60000", null, MediaStoreAudioMediaTITLE);

怎样可以得到免费的QQ播放器

是QQ空间的的播放器吗

在QQ商城搜寻栏输入BLUE,会有免费的

android mediaplayer能播放什么格式的档案

Android官方公布的文件显示MediaPlayer支援如下视讯格式:

Video H263 X X 3GPP (3gp) and MPEG-4 (mp4)

H264 AVC X 3GPP (3gp) and MPEG-4 (mp4)

MPEG-4 SP X 3GPP (3gp)

这些格式的视讯,基本上属于手机支援的视讯格式。如果想观看其他型别格式的视讯,比如flv等,需要下载暴风、迅雷等播放器。

android mediaplayer可以播放flash吗

Android22之后才支援安装Flash外挂并在WebView播放Flash视讯,初步想法是给Activity设定一个全屏的WebView,然后传入一个Flash地址。MediaPlayer类实质上是一个控制器,用于播放OSMF中所支援的任何媒体元素型别。

因此,如果为一个MediaPlayer物件提供ImageElement物件,则它可以生成一幅影象;如果为一个MediaPlayer物件传递VideoElement物件,则它可以渲染一个视讯。

下面列出了由MediaPlayer物件所呈现的每一个公共属性。

● audioPan:一个数字,表示媒体的pan属性。

● autoDynamicStreamSwitch:一个布林值,指示媒体是否自动在动态流之间切换。

● autoPlay:一个布林值,定义媒体是否在载入 *** 作成功完成后立即开始播放。

● autoRewind:一个布林值,定义媒体在回放完成后是否返回到回放起始位置。

● buffering:一个布林值,指示媒体当前是否正在缓冲。

● bufferLength:一个数字,指示当前媒体缓冲区中的内容长度,以秒为单位。

● bufferTime:一个数字,指示媒体缓冲区的适宜长度,以秒为单位。

● bytesLoaded:一个数字,返回媒体已经载入内容的位元组数。

● bytesLoadedUpdateInterval:一个数字,表示为bytesLoaded属性分派改变事件的间隔时间。

● bytesTotal:一个数字,表示媒体将要载入的总位元组数。

● canBuffer:一个布林值,指示媒体是否可以缓冲。

● canLoad:一个布林值,指示媒体是否可以载入。

● canPause:一个布林值,指示媒体是否可以暂停。

● canPlay:一个布林值,指示媒体是否可以播放。

● canSeek:一个布林值,指示媒体是否可以定址。

● currentDynamicStreamIndex:一个整数,代表当前正在渲染的动态媒体流的索引。

● currentTime:一个数字,返回播放头的当前时间,以秒为单位。

● currentTimeUpdateInterval:一个数字,定义当前时间分派变化事件之间的时间间隔,以毫秒为单位。

● displayObject:媒体的DisplayObject物件。

● drmEndDate:一个日期,指示回放视窗的结束日期。

● drmPeriod:一个数字,返回回放视窗的长度,以秒为单位。

● drmStartDate:一个日期,指示回放视窗的开始日期。

● drmState:一个字串,指示该媒体DRM的当前状态。

● duration:一个数字,表示媒体回放的持续时间,以秒为单位。

● dynamicStreamSwitching:一个布林值,指示当前是否正在进行动态媒体流切换。

● hasAudio:一个布林值,指示媒体是否包含音讯。

● hasDRM:一个布林值,指示媒体元素是否具有DRMTrait。

● isDVRRecording:一个布林值,指示媒体是否支援DVR以及当前是否正在录制。

● isDynamicStream:一个布林值,指示媒体是否由动态流组成。

● loop:一个布林值,指示媒体是否应该在回放完成之后再次播放。

● maxAllowedDynamicStreamIndex:一个整数,表示最大允许的动态流索引。

● media:一个MediaElement物件,定义媒体播放器当前正在控制的源媒体元素。

● mediaHeight:一个数字,定义媒体的高度,以画素为单位。

● mediaWidth:一个数字,定义媒体的宽度,以画素为单位。

● muted:一个布林值,指示媒体当前是否静音。

● numDynamicStreams:一个整数,表示动态流索引的总数。

● paused:一个布林值,指示媒体当前是否暂停。

● playing:一个布林值,指示当前媒体是否正在播放。

● seeking:一个布林值,指示媒体当前是否正在定址。

● state:一个字串,表示媒体的当前状态。

● temporal:一个布林值,指示媒体是否为暂时性的。

● volume:一个数字,表示媒体的音量。

MediaPlayer还提供了许多方便的函式用于控制媒体,包括

● authenticate(username:String = null, password:String = null):用于认证媒体。

● authenticateWithToken(token:Object):使用用做令牌的物件来认证媒体。

● canSeekTo(seconds:Number):用于确定媒体是否可定址到指定时间,以秒为单位。

● getBitrateForDynamicStreamIndex(index:int):用于获取指定动态流索引的位元速率,以千位元组为单位。

● pause():用于暂停媒体,如果它还没有暂停的话。

● play():用于播放媒体,如果当前它没有处于播放状态的话。

● seek(time:Number):用于跳转到媒体档案中的指定时间。

● s():用于停止回放并返回到媒体档案的开头。

● switchDynamicStreamIndex(index:int):用于切换到特定动态流索引。

对于OSMF专案,将需要汇入MediaPlayer;它可以在o fmedia包中找到。

import o fmediaMediaPlayer;

为了利用一个AudioElement物件,需要建立一个MediaPlayer物件,然后将AudioElement物件赋值给MediaPlayer物件的media属性。

如果将MediaPlayer升级到可以播放rm档案

永远不可以

你可以下暴风影音,这样就可以播放很多格式的档案了,而且占用资源少

暴风影音(Media Player Classic)是大家最常用的视讯播放软体之一,除了支援RealOne、Windows Media Player等多媒体格式外,暴风影音还支援QuickTime、DVDRip以及APE等格式。所以,她又有“万能播放器”的美称。可是,在使用过程中,我们经常会碰到这样或那样问题,其实通过简单的设定就可以解决这些问题。

技巧例项一:播放RM档案不正常

有时在播放RM、RMVB档案的时候出现不正常,比如有的时候不能播放,有时播放没有影象,有时无法通过暂停、停止按钮来控制播放。该问题可能是由于暴风影音所支援的Real格式模式的设定造成的,要解决该问题,可以尝试如下的 *** 作:执行暴风影音,依次单击“检视→选项”,在开启的选项视窗左侧选择“格式”。接着,在右侧的副档名列表中选择“Real媒体档案”,将实时媒体流协议控制代码设定改为“DirectShow”。最后,单击“确定”按钮即可。

友情提示:不过要使用暴风影音线上播放RM、RMVB流媒体档案,需要将“DirectShow”改回“RealMedia”。

技巧例项二:无法播放MP4档案

在播放采用QuickTime Pro制作的MP4档案时,暴风影音无法进行播放。这是由于预设情况下,标准的MP4档案采用了DirectShow渲染,而采用QuickTime Pro制作的MP4档案采用了QuickTime渲染。具体的设定方法如下:在“开始”选单中,执行“暴风影音综合设定”。接着,在开启的视窗左侧“任务”中选中“MPEG-4解码设定”,单击“下一步”按钮。然后,在开启的视窗中将“MP4渲染方式”改为“QuickTime”。最后,单击“确定”按钮即可。

友情提示:在下次观看标准MP4档案的时候,别忘了将MP4渲染方式改回“DirectShow”。

技巧例项三:无法载入字幕

预设情况下,在暴风影音中是无法给RMVB档案载入字幕的,要新增字幕必须进行相应的设定。比如播放本地的RMVB档案,可以开启选项视窗,在左侧选择“回放”下的“输出”。接着,在右侧的视窗中,在“DirectShow视讯”中选择“WMR7(无转换)”。

如果要播放线上视讯,同样是在该视窗中,将“RealMedia视讯”选项设定为“DirectX 7”,单击“确定”按钮即可。这样,回到暴风影音主视窗,依次单击“档案→载入字幕”,然后选择字幕档案,单击“开启”按钮即可完成字幕的载入。

技巧例项四:双语**问题

在使用暴风影音播放双语压制的影片的时候,很多人不知道如何去切换声道?其实, *** 作方法很简单:开启选项视窗,在左侧选择“滤镜”下的“音讯切换器”。接着,在右侧的视窗中选择“启用自定义声道对映”复选框,在下面我们可以看到有两个声道,可以按住Shift键单击其中一个声道,这样可以切换声道。最后,单击“确定”按钮即可。

津政发[1987]106号档案从哪里可以得到

你可以到当地劳动人事局查询,或者到当地档案局付费查询还有当地的一些老企业中的文书档案(长期卷)中都有存档的.

上传档案可以得到多少财富值

如果成功上传,每当被人下载一次就增加财富值

标价非0分文件被别人下载

+标价/被下载 1 次

每份文件可以通过文件被下载获得财富值奖励的上限为 200 分。

当单份文件下载量超过 500 时, 500-600 次下载之间,每被下载 1 次,可以获得:文件标价分 + 系统奖励 1 分

标价为0分文件被别人下载

1-200 次下载,每被下载 1 次,使用者获得:系统奖励 1 分。

当单份文件下载量超过 500 时,500-600 次下载之间,每被下载 1 次,获得:系统奖励 2 分。

PS:自己下载自己资源不扣分、不加分

以上就是关于android中音乐如何网络获取专辑封面图片全部的内容,包括:android中音乐如何网络获取专辑封面图片、android开发中怎么在资源文件中获取mp3文件、android 如何获取音乐播放时长等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/9471656.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存