Android Widget 简单例程(mp3播放)
2012-10-30 15:55
363 查看
![](http://img.my.csdn.net/uploads/201210/30/1351582956_3993.png)
![](http://img.my.csdn.net/uploads/201210/30/1351582990_5394.png)
如图所示:完成一个音乐播放器的小窗口Widget,可用AppWidgetProvider实现。
![](http://img.my.csdn.net/uploads/201210/30/1351583337_5765.png)
点击左边的icon跳转进入上面的播放界面,同时可以通过点击widget来控制播放/暂停。下面显示当前播放进度。
关于AppWidgetProvider可参考这篇文章:
/article/1456494.html
主要代码:
MusicPlayerWidgetProvider.java
package com.lau.musicplayer.widget; 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.util.Log; import android.widget.RemoteViews; import com.lau.musicplayer.MusicPlayerActivity; import com.lau.musicplayer.R; import com.lau.musicplayer.util.Util; public class MusicPlayerWidgetProvider extends AppWidgetProvider { private static final String ACTION_UPDATE_WIDGET = "com.lau.musicplayer.UPDATE_WIDGET"; private static final String ACTION_PAUSE_PLAY = "com.lau.musicplayer.PAUSE_PLAY"; private static final String ACTION_DESTROY = "com.lau.musicplayer.DESTROY"; @Override public void onDeleted(Context context, int[] appWidgetIds) { Log.d("DEBUG", "onDeleted"); super.onDeleted(context, appWidgetIds); } @Override public void onDisabled(Context context) { Log.d("DEBUG", "onDisabled"); super.onDisabled(context); } @Override public void onEnabled(Context context) { Log.d("DEBUG", "onEnabled"); super.onEnabled(context); } @Override public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); Log.d("DEBUG", "widget.onReceive(" + intent.getAction() + ")"); RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.music_player_widget_provider); Intent iMusicPlayer = new Intent(); iMusicPlayer.setClass(context, MusicPlayerActivity.class); // iMusicPlayer.setClassName(context.getPackageName(), "com.lau.musicplayer.MusicPlayerActivity"); PendingIntent piMusicPlayer = PendingIntent.getActivity(context, 0, iMusicPlayer, PendingIntent.FLAG_UPDATE_CURRENT); views.setOnClickPendingIntent(R.id.music_player_widget_icon, piMusicPlayer); if(ACTION_DESTROY.equals(intent.getAction())) { views.setTextViewText(R.id.music_player_widget_time, context.getResources().getString(R.string.music_player)); views.setImageViewResource(R.id.music_player_widget_playpause, R.drawable.media_player_play_button); } else if(ACTION_UPDATE_WIDGET.equals(intent.getAction())) { int time = intent.getIntExtra("time", 0); int length = intent.getIntExtra("length", 0); boolean isPlaying = intent.getBooleanExtra("isPlaying", false); views.setTextViewText(R.id.music_player_widget_time, Util.millisToString(time) + " / " + Util.millisToString(length)); if(isPlaying) { views.setImageViewResource(R.id.music_player_widget_playpause, R.drawable.media_player_pause_button); } else { views.setImageViewResource(R.id.music_player_widget_playpause, R.drawable.media_player_play_button); } Intent iPlayPause = new Intent(ACTION_PAUSE_PLAY); PendingIntent piPlayPause = PendingIntent.getBroadcast(context, 0, iPlayPause, PendingIntent.FLAG_UPDATE_CURRENT); views.setOnClickPendingIntent(R.id.music_player_widget_playpause, piPlayPause); } ComponentName widget = new ComponentName(context, MusicPlayerWidgetProvider.class); AppWidgetManager widgetManager = AppWidgetManager.getInstance(context); widgetManager.updateAppWidget(widget, views); } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { Log.d("DEBUG", "onUpdate"); super.onUpdate(context, appWidgetManager, appWidgetIds); } }
AudioService.java
package com.lau.musicplayer; import java.io.IOException; import android.app.Service; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.os.Handler; import android.os.IBinder; import android.os.Message; import android.os.RemoteException; import android.util.Log; import com.lau.musicplayer.interfaces.IAudioService; import com.lau.musicplayer.widget.MusicPlayerWidgetProvider; public class AudioService extends Service { private static final String PATH = "/mnt/sdcard/test.mp3"; private static final int MSG_UPDATE_WIDGET = 1; private MediaPlayer mediaPlayer; private static final String ACTION_UPDATE_WIDGET = "com.lau.musicplayer.UPDATE_WIDGET"; private static final String ACTION_PAUSE_PLAY = "com.lau.musicplayer.PAUSE_PLAY"; @Override public IBinder onBind(Intent intent) { Log.d("DEBUG", "AudioService onBind"); IntentFilter filter = new IntentFilter(); filter.addAction(ACTION_PAUSE_PLAY); registerReceiver(broadcastReceiver, filter); return mInterface; } @Override public void onDestroy() { Log.d("DEBUG", "AudioService onDestroy"); super.onDestroy(); } private static final String ACTION_DESTROY = "com.lau.musicplayer.DESTROY"; @Override public boolean onUnbind(Intent intent) { Log.d("DEBUG", "AudioService onUnbind"); if(mediaPlayer != null) { mediaPlayer.release(); } mHandler.removeMessages(MSG_UPDATE_WIDGET); unregisterReceiver(broadcastReceiver); Intent i = new Intent(); i.setClass(this, MusicPlayerWidgetProvider.class); i.setAction(ACTION_DESTROY); sendBroadcast(i); return super.onUnbind(intent); } private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what == MSG_UPDATE_WIDGET) { updateWidget(AudioService.this); mHandler.sendEmptyMessageDelayed(MSG_UPDATE_WIDGET, 1000); } } }; private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.d("DEBUG", "ACTION_PAUSE_PLAY: " + intent.getAction()); if(ACTION_PAUSE_PLAY.equals(intent.getAction())) { if(isPlay()) { AudioService.this.pause(); } else { AudioService.this.play(); } } } }; private void updateWidget(Context context) { Intent intent = new Intent(); intent.setClass(this, MusicPlayerWidgetProvider.class); intent.setAction(ACTION_UPDATE_WIDGET); intent.putExtra("time", mediaPlayer.getCurrentPosition()); intent.putExtra("length", mediaPlayer.getDuration()); intent.putExtra("isPlaying", isPlay()); sendBroadcast(intent); } IAudioService.Stub mInterface = new IAudioService.Stub() { @Override public void play() throws RemoteException { AudioService.this.play(); } @Override public void pause() throws RemoteException { AudioService.this.pause(); } @Override public int getTime() throws RemoteException { if(mediaPlayer != null) { return mediaPlayer.getCurrentPosition(); } return 0; } @Override public int getLength() throws RemoteException { if(mediaPlayer != null) { return mediaPlayer.getDuration(); } return 0; } @Override public boolean isPlay() throws RemoteException { return AudioService.this.isPlay(); } @Override public void seekTo(int progress) throws RemoteException { if(mediaPlayer != null) { mediaPlayer.seekTo(progress); } } }; private boolean isPlay() { if(mediaPlayer != null && mediaPlayer.isPlaying()) { return true; } return false; } private void play() { if(mediaPlayer == null) { try { mediaPlayer = new MediaPlayer(); mediaPlayer.reset(); mediaPlayer.setDataSource(PATH); mediaPlayer.prepare(); mediaPlayer.start(); mediaPlayer.setOnCompletionListener(new OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { try { mediaPlayer.reset(); mediaPlayer.setDataSource(PATH); mediaPlayer.prepare(); mediaPlayer.start(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } else { mediaPlayer.start(); } mHandler.sendEmptyMessageDelayed(MSG_UPDATE_WIDGET, 1000); updateWidget(this); } private void pause() { if(mediaPlayer != null && mediaPlayer.isPlaying()) { mediaPlayer.pause(); } mHandler.removeMessages(MSG_UPDATE_WIDGET); updateWidget(this); } }
源码下载
http://download.csdn.net/detail/laukaka/4702752
相关文章推荐
- Android MediaPlayer 简单综合应用------列出sdcard里所有.mp3文件,并且可以点击播放!
- android示例:简单的播放MP3并显示歌词的应用(待更新)
- JAVA播放MP3的完整代码---简单写个小例子
- 简单的使用libmad的low-level api和portaudio写的播放mp3的小程序
- 我的Andriod的HelloWorld----最简单的播放MP3的Demo
- 课程设计(打字游戏)设计功能实现之---简单的音乐mp3播放功能实现
- Android MediaPlayer 简单综合应用------列出sdcard里所有.mp3文件,并且可以点击播放!
- C#实现简单播放mp3的方法
- fmod简单播放mp3
- html制作简单框架网页 实现自己的音乐驿站 操作步骤及源文件下载 (播放功能限mp3文件)
- 元旦快乐,阖家团圆,幸福安康.简单地播放MP3和暂停
- 简单播放 mp3 - 回复 "heyongan" 的问题
- 一个超简单的MP3播放(转)
- MediaPlayer 播放 MP3文件的简单使用
- JAVA播放MP3的完整代码---简单写个小例子
- 用H5实现简单的MP3MP4的播放
- DSplay库 例程(一)简单播放媒体文件
- Android MediaPlayer 简单综合应用------列出sdcard里所有.mp3文件,并且可以点击播放!
- MFC简单mp3播放器播放功能实现
- Android 4.4.4 在线播放mp3文件存在的问题