接上篇 新手学写music widget(可以显示歌曲名称以及专辑图片) 源码附最后
来源:互联网 发布:手机代驾软件 编辑:程序博客网 时间:2024/06/05 09:07
Cursor mAudioCursor = this.getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
MediaStore.Audio.AudioColumns.TITLE);
通过上述方法后 我们可以得到歌曲的相关信息 例如
int indexTitle = mAudioCursor
.getColumnIndex(MediaStore.Audio.AudioColumns.TITLE);// 歌名
int indexARTIST = mAudioCursor
.getColumnIndex(MediaStore.Audio.AudioColumns.ARTIST);// 艺术家
我们播放歌曲最重要的是要取得歌曲路径 可以用下方法
int indexPATH = mAudioCursor
.getColumnIndex(MediaStore.Audio.AudioColumns.DATA);// 歌曲路径
BlueMusicAppWidgetProvider.java
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
MediaStore.Audio.AudioColumns.TITLE);
通过上述方法后 我们可以得到歌曲的相关信息 例如
int indexTitle = mAudioCursor
.getColumnIndex(MediaStore.Audio.AudioColumns.TITLE);// 歌名
int indexARTIST = mAudioCursor
.getColumnIndex(MediaStore.Audio.AudioColumns.ARTIST);// 艺术家
我们播放歌曲最重要的是要取得歌曲路径 可以用下方法
int indexPATH = mAudioCursor
.getColumnIndex(MediaStore.Audio.AudioColumns.DATA);// 歌曲路径
因为我们取得专辑图片后 要在指定的区域显示 所以涉及图片的叠加合成处理 具体处理见代码吧
MusicService.java
package com.shop.bluemusicappwidget;import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.shop.bluemusicappwidget.R;import android.R.string;import android.app.Service;import android.content.BroadcastReceiver;import android.content.ContentResolver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.media.MediaPlayer;import android.os.IBinder;import android.provider.MediaStore;import android.util.Log;public class MusicService extends Service { private MediaPlayer player; private int currindex = 0; private BroadcastReceiver receiver; List<Map<String, Object>> mListData; static Bitmap bitmapxx; // private static Bitmap bitmap; @Override public void onCreate() { super.onCreate(); Log.v("shopping", "music service create"); } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); player = new MediaPlayer(); Log.v("shopping", "loading music"); getAllMusicInfo(); Log.v("shopping", "music loaded !"); try { player.setDataSource(getCurindPath(currindex)); player.prepare(); } catch (IllegalArgumentException e1) { e1.printStackTrace(); } catch (IllegalStateException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals("com.shop.bluemusicappwidget.playorpause")) { if (!player.isPlaying()) { try { player.start(); sendPlay(); } catch (IllegalStateException e) { e.printStackTrace(); } } else { player.pause(); sendPause(); } } else if (action.equals("com.shop.bluemusicappwidget.next")) { playNext(); } else if (action .equals("com.shop.bluemusicappwidget.previous")) { playPrevious(); } } }; IntentFilter filter = new IntentFilter(); filter.addAction("com.shop.bluemusicappwidget.next"); filter.addAction("com.shop.bluemusicappwidget.playorpause"); filter.addAction("com.shop.bluemusicappwidget.previous"); registerReceiver(receiver, filter); } public void getAllMusicInfo() { Cursor mAudioCursor = this.getContentResolver().query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, MediaStore.Audio.AudioColumns.TITLE); mListData = new ArrayList<Map<String, Object>>(); for (int i = 0; i < mAudioCursor.getCount(); i++) { mAudioCursor.moveToNext(); // 找到歌曲标题和总时间对应的列索引 int indexTitle = mAudioCursor .getColumnIndex(MediaStore.Audio.AudioColumns.TITLE);// 歌名 int indexARTIST = mAudioCursor .getColumnIndex(MediaStore.Audio.AudioColumns.ARTIST);// 艺术家 int indexALBUM = mAudioCursor .getColumnIndex(MediaStore.Audio.AudioColumns.ALBUM);// 专辑 int indexPATH = mAudioCursor .getColumnIndex(MediaStore.Audio.AudioColumns.DATA);// 歌曲路径 int indexALBUMKEY = mAudioCursor .getColumnIndex(MediaStore.Audio.AudioColumns.ALBUM_KEY);// 歌曲专辑 String strTitle = mAudioCursor.getString(indexTitle); String strARTIST = mAudioCursor.getString(indexARTIST); String strALBUM = mAudioCursor.getString(indexALBUM); String strPATH = mAudioCursor.getString(indexPATH); String strALBUMPATH = mAudioCursor.getString(indexALBUMKEY); String[] argArr = { strALBUMPATH }; ContentResolver albumResolver = this.getContentResolver(); Cursor albumCursor = albumResolver.query( MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI, null, MediaStore.Audio.AudioColumns.ALBUM_KEY + " = ?", argArr, null); HashMap<String, Object> nowMap = new HashMap<String, Object>(); nowMap.put("SongTitle", strTitle); nowMap.put("SongArtist", strARTIST); nowMap.put("SongAlbum", strALBUM); nowMap.put("SongPath", strPATH); Log.v("shopping", "SongTitle = " + strTitle); if (null != albumCursor && albumCursor.getCount() > 0) { albumCursor.moveToFirst(); int albumArtIndex = albumCursor .getColumnIndex(MediaStore.Audio.AlbumColumns.ALBUM_ART); String musicAlbumArtPath = albumCursor.getString(albumArtIndex); if (null != musicAlbumArtPath && !"".equals(musicAlbumArtPath)) { Bitmap bitmap = BitmapFactory.decodeFile(musicAlbumArtPath); Log.v("shopping", "musicAlbumArtPath = " + musicAlbumArtPath); //这个地方还做判断 是因为在2.3机子上实验有问题 4.0上是可以的 if (bitmap != null) { nowMap.put("SongAlbumImage", bitmap); } else { nowMap.put("SongAlbumImage", BitmapFactory .decodeResource(getResources(), R.drawable.albumart_mp_unknown)); } } else { Log.v("shopping", "SongAlbumImage11111111"); nowMap.put("SongAlbumImage", BitmapFactory.decodeResource( getResources(), R.drawable.albumart_mp_unknown)); } } else { // 没有专辑定义,给默认图片 Log.v("shopping", "SongAlbumImage22222222222"); nowMap.put("SongAlbumImage", BitmapFactory.decodeResource( getResources(), R.drawable.albumart_mp_unknown)); } mListData.add(nowMap); } Log.v("shopping", "mListDataSize = " + mListData.size()); Log.v("shopping", "mListData = " + mListData); } public String getCurindName(int currindex) { String songName = (String) mListData.get(currindex).get("SongTitle"); return songName; } public String getCurindArtist(int currindex) { String songArtist = (String) mListData.get(currindex).get("SongArtist"); return songArtist; } public String getCurindPath(int currindex) { String songPath = (String) mListData.get(currindex).get("SongPath"); return songPath; } public Bitmap getCurindAlbumImageBm(int currindex) { Bitmap SongAlbumBitmap = (Bitmap) mListData.get(currindex).get( "SongAlbumImage"); Log.v("shopping2", "SongAlbumBitmap = " + SongAlbumBitmap); return SongAlbumBitmap; } public void playNext() { if (currindex < mListData.size() - 1) { currindex++; } else if (currindex == mListData.size() - 1) { currindex = 0; } play(); } public void playPrevious() { if (currindex == 0) { currindex = mListData.size() - 1; } else if (currindex > 0) { currindex--; } play(); } public void play() { Log.v("shopping", "music " + currindex); try { player.reset(); player.setDataSource(getCurindPath(currindex)); player.prepare(); player.start(); sendPlay(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } @Override public void onDestroy() { player.stop(); player.release(); unregisterReceiver(receiver); super.onDestroy(); } @Override public IBinder onBind(Intent intent) { return null; } /** * 发送播放通知,以便widget改变图标样式 */ public void sendPlay() { Intent play = new Intent("com.shop.bluemusicappwidget.play"); sendBroadcast(play); Log.v("shopping", "sendBroadcast---play"); try { sendTitle(); } catch (Exception e) { } try { sendBitmap(); } catch (Exception e) { } } public void sendPause() { Intent play = new Intent("com.shop.bluemusicappwidget.pause"); sendBroadcast(play); Log.v("shopping", "sendBroadcast---pause"); } /** * 发送歌曲标题到widget */ public void sendTitle() { Log.v("shopping", "sendTitle"); String title = ""; title = getCurindName(currindex) + " - " + getCurindArtist(currindex); Log.v("shopping", "title = " + title); Intent i = new Intent("com.shop.bluemusicappwidget.title"); i.putExtra(Intent.EXTRA_TEXT, title); sendBroadcast(i); } public void sendBitmap() { Log.v("shopping", "sendBitmap"); bitmapxx = getCurindAlbumImageBm(currindex); Intent i = new Intent("com.shop.bluemusicappwidget.bitmap"); sendBroadcast(i); }}
BlueMusicAppWidgetProvider.java
package com.shop.bluemusicappwidget;import android.app.PendingIntent;import android.appwidget.AppWidgetManager;import android.appwidget.AppWidgetProvider;import android.content.ComponentName;import android.content.Context;import android.content.Intent;import android.graphics.Bitmap;import android.graphics.Bitmap.Config;import android.graphics.BitmapFactory;import android.graphics.Canvas;import android.util.Log;import android.widget.RemoteViews;import com.shop.bluemusicappwidget.R;public class BlueMusicAppWidgetProvider extends AppWidgetProvider { @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); String action = intent.getAction(); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.bluemusic_widget); Log.v("shopping", "onReceive"); if (action.equals("com.shop.bluemusicappwidget.play")) { Log.v("shopping", "appwidget_music_pause"); views.setImageViewResource(R.id.control_play, R.drawable.appwidget_music_pause); } else if (action.equals("com.shop.bluemusicappwidget.pause")) { Log.v("shopping", "appwidget_music_play"); views.setImageViewResource(R.id.control_play, R.drawable.appwidget_music_play); } else if (action.equals("com.shop.bluemusicappwidget.title")) { Log.v("shopping", "appwidget_music_title"); views.setTextViewText(R.id.artist, intent.getStringExtra(Intent.EXTRA_TEXT)); } else if (action.equals("com.shop.bluemusicappwidget.bitmap")) { Log.v("shopping", "appwidget_music_bitmap"); if (MusicService.bitmapxx != null) { Log.v("shopping3", "bitmapxx != null"); Bitmap bitmap = getBlueCornerBitmap(context, MusicService.bitmapxx); views.setImageViewBitmap(R.id.album_border, bitmap); } } AppWidgetManager mgr = AppWidgetManager.getInstance(context); mgr.updateAppWidget(new ComponentName(context, BlueMusicAppWidgetProvider.class), views); } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { super.onUpdate(context, appWidgetManager, appWidgetIds); Log.v("shopping", "onUpdate"); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.bluemusic_widget); Intent inext = new Intent("com.shop.bluemusicappwidget.next"); PendingIntent pnext = PendingIntent.getBroadcast(context, 0, inext, 0); Intent iprevious = new Intent("com.shop.bluemusicappwidget.previous"); PendingIntent pprevious = PendingIntent.getBroadcast(context, 0, iprevious, 0); Intent iplay = new Intent("com.shop.bluemusicappwidget.playorpause"); PendingIntent pplay = PendingIntent.getBroadcast(context, 0, iplay, 0); views.setOnClickPendingIntent(R.id.control_next, pnext); views.setOnClickPendingIntent(R.id.control_pre, pprevious); views.setOnClickPendingIntent(R.id.control_play, pplay); AppWidgetManager mgr = AppWidgetManager.getInstance(context); mgr.updateAppWidget(new ComponentName(context, BlueMusicAppWidgetProvider.class), views); } @Override public void onDisabled(Context context) { super.onDisabled(context); Log.v("shopping", "onDisabled"); Intent intent = new Intent(context, MusicService.class); context.stopService(intent); } @Override public void onEnabled(Context context) { super.onEnabled(context); Log.v("shopping", "onEnabled"); Intent intent = new Intent(context, MusicService.class); context.startService(intent); } public Bitmap getBlueCornerBitmap(Context context, Bitmap bitmap) { // bitmap = bitmapZoomByScale(bitmap, 0.5, 0.5); // bitmap = rotate(bitmap, -45); final Bitmap maskBitmap; maskBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.pip_3_frame); int w = maskBitmap.getWidth(); int h = maskBitmap.getHeight(); bitmap = Bitmap.createScaledBitmap(bitmap, w, h, false); // if(frameBitmap == null || frameBitmap.isRecycled() && resIds[0] != // -1){ // frameBitmap = BitmapFactory.decodeResource(context.getResources(), // resIds[0]); // } Bitmap output = Bitmap.createBitmap(w, h, Config.ARGB_8888); Canvas canvas = new Canvas(output); int[] picPixels = new int[w * h]; int[] maskPixels = new int[w * h]; bitmap.getPixels(picPixels, 0, w, 0, 0, w, h); maskBitmap.getPixels(maskPixels, 0, w, 0, 0, w, h); for (int i = 0; i < maskPixels.length; i++) { if (maskPixels[i] == 0xff000000) { picPixels[i] = 0; } else if (maskPixels[i] == 0) { // donothing } else { // 把mask的a通道应用与picBitmap maskPixels[i] &= 0xff000000; maskPixels[i] = 0xff000000 - maskPixels[i]; picPixels[i] &= 0x00ffffff; picPixels[i] |= maskPixels[i]; } } // 生成前置图片添加蒙板后的bitmap:resultBitmap output.setPixels(picPixels, 0, w, 0, 0, w, h); canvas.drawBitmap(output, w, h, null); return output; }}
效果图
源码下载:点击打开链接
- 接上篇 新手学写music widget(可以显示歌曲名称以及专辑图片) 源码附最后
- (转)Delphi新手跟我学写CALL,附完整原程序
- VC右键菜单中显示图片,附源码
- 细致的C语言写贪吃蛇教程+详细思路-适合新手附源码
- Music播放器中歌曲是如何获得专辑图片的
- Music播放器中歌曲是如何获得专辑图片的
- 新手--从网络加载图片并存储在本地,断开网络后依然可以显示图片
- 新手学习之点击gridview切换图片,以及图片的显示和隐藏
- 读取MP3文件内的ID3V2专辑图片并显示
- android 完美获取音乐文件中的专辑图片并显示
- 如何提高网页中图片显示的用户体验(附源码下载)
- ps新手学-去掉图片水印
- 接上篇
- 接上篇...........
- 如何写music apk
- 功能设计源码以及思路-图片上传篇
- 从百度网页上下载歌曲,歌曲名称显示乱码
- 可以接上面I2C驱动
- Linux下使用eclipse调试hadoop程序
- OpenCV图像的阈值化
- 关于ROWNUM的使用(二)
- PE文件格式详解(上)
- win2003中基于iis6部署django网站
- 接上篇 新手学写music widget(可以显示歌曲名称以及专辑图片) 源码附最后
- 《LINUX设备驱动程序》第4章(调试技术)学习笔记
- STL中map用法详解
- linux 按键应用程序
- 一个cocos2dx 游戏解读(AppDelegate)
- uclinux FM3芯片的移植
- Nexus入门指南(图文)
- C++的public,private,protected权限
- python link