Android Widget 简单例程(mp3播放)
来源:互联网 发布:小米净化器2 重置网络 编辑:程序博客网 时间:2024/06/04 19:19
如图所示:完成一个音乐播放器的小窗口Widget,可用AppWidgetProvider实现。
点击左边的icon跳转进入上面的播放界面,同时可以通过点击widget来控制播放/暂停。下面显示当前播放进度。
关于AppWidgetProvider可参考这篇文章:
http://blog.csdn.net/coolszy/article/details/7028531
主要代码:
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";@Overridepublic void onDeleted(Context context, int[] appWidgetIds) {Log.d("DEBUG", "onDeleted");super.onDeleted(context, appWidgetIds);}@Overridepublic void onDisabled(Context context) {Log.d("DEBUG", "onDisabled");super.onDisabled(context);}@Overridepublic void onEnabled(Context context) {Log.d("DEBUG", "onEnabled");super.onEnabled(context);}@Overridepublic 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);}@Overridepublic 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";@Overridepublic IBinder onBind(Intent intent) {Log.d("DEBUG", "AudioService onBind");IntentFilter filter = new IntentFilter();filter.addAction(ACTION_PAUSE_PLAY);registerReceiver(broadcastReceiver, filter);return mInterface;}@Overridepublic void onDestroy() {Log.d("DEBUG", "AudioService onDestroy");super.onDestroy();}private static final String ACTION_DESTROY = "com.lau.musicplayer.DESTROY";@Overridepublic 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() {@Overridepublic 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() {@Overridepublic 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() {@Overridepublic void play() throws RemoteException {AudioService.this.play();}@Overridepublic void pause() throws RemoteException {AudioService.this.pause();}@Overridepublic int getTime() throws RemoteException {if(mediaPlayer != null) {return mediaPlayer.getCurrentPosition();}return 0;}@Overridepublic int getLength() throws RemoteException {if(mediaPlayer != null) {return mediaPlayer.getDuration();}return 0;}@Overridepublic boolean isPlay() throws RemoteException {return AudioService.this.isPlay();}@Overridepublic 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() {@Overridepublic 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 Widget 简单例程(mp3播放)
- Android开发,简单MP3播放器
- 简单MP3播放器
- android命令行播放mp3
- android命令行播放mp3
- android mp3播放器
- Android 播放mp3
- 【audio play音频】 android 简单的MP3播放器代码
- 简单的MP3播放器
- C# mp3播放简单实现
- 简单的MP3播放器
- Java简单MP3播放器
- 简单mp3播放器:音频播放核心
- Android学习-MP3播放器
- Android学习笔记--播放MP3
- Android MP3播放(web)
- Android MP3播放器MediaPlayer
- android实现MP3播放器
- POJ1850-Code
- jdbc(RowSet离线结果集)
- python 文件读写
- html中字体,特殊字符和标签如何显示呢?
- SQL Server数据类型
- Android Widget 简单例程(mp3播放)
- 云计算简单知识整理
- 合并两个有序单链表
- POJ 3252 Round Numbers
- OEM,ODM,OBM是什么??
- web中的checkbox以及strtus2的CheckboxInterceptor
- 值得参考的 10 个 LESS CSS 实例
- 原创伤感qq日志-早已习惯两指之间夹着烟的孤单
- 媒体MediaPlayer错误详细解析