package cn.qylk.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.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.RemoteViews;
import cn.qylk.ListUI;
import cn.qylk.R;
import cn.qylk.app.APP;
import cn.qylk.app.MyAction;
import cn.qylk.utils.SendAction;
import cn.qylk.utils.SendAction.ServiceControl;
/**
* @author qylk2012
*
*/
public class MediaAppWidgetProvider extends AppWidgetProvider {
private static Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
APP.getInstance().stopService(
new Intent(MyAction.INTENT_START_SERVICE));
super.handleMessage(msg);
}
};
private static RemoteViews views;
public static void updateAppWidget(Context context,
AppWidgetManager appWidgeManger, int appWidgetId) {
views = new RemoteViews(context.getPackageName(), R.layout.widget);
Intent next = new Intent(MyAction.INTENT_WIDGET_CONTROL);// 下一曲广播意图
next.putExtra("code", 1);// 加入标志以便区别是哪个按钮
PendingIntent pendingNextIntent = PendingIntent.getBroadcast(context,
1, next, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.widgetnext, pendingNextIntent);
Intent play = new Intent(MyAction.INTENT_WIDGET_CONTROL);// 播放或暂停意图
play.putExtra("code", 2);
PendingIntent pendingPlayIntent = PendingIntent.getBroadcast(context,
0, play, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.widgetplaypause, pendingPlayIntent);
Intent pre = new Intent(MyAction.INTENT_WIDGET_CONTROL);// 上一曲意图
pre.putExtra("code", 0);
PendingIntent pendingPreIntent = PendingIntent.getBroadcast(context,
-1, pre, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.widgetpre, pendingPreIntent);
Intent intent = new Intent(context, ListUI.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
intent, 0);
views.setOnClickPendingIntent(R.id.musictitle, pendingIntent);
appWidgeManger.updateAppWidget(appWidgetId, views);
}
@Override
public void onReceive(Context context, Intent intent) {
if (views == null) {
views = new RemoteViews(context.getPackageName(), R.layout.widget);
}
AppWidgetManager appWidgetManger = AppWidgetManager
.getInstance(context);
int[] appIds = appWidgetManger.getAppWidgetIds(new ComponentName(
context, getClass()));
// if (appIds.length == 0)
// return;
handler.removeMessages(0);
String action = intent.getAction();
if (action.equals(MyAction.INTENT_WIDGET_CONTROL)) {// widget按钮广播
context.startService(new Intent(MyAction.INTENT_START_SERVICE));
Bundle bundle = intent.getExtras();
int code = bundle.getInt("code");// 得知是那个按钮
SendAction.SendControlMsg(ServiceControl.values()[code]);
} else if (action.equals(MyAction.INTENT_STATUS)) {// widget上信息内容更新广播
Bundle bundle = intent.getExtras();
boolean isplaying = bundle.getBoolean("isplaying");
views.setImageViewResource(R.id.widgetplaypause,
isplaying ? R.drawable.btn_pause_bg
: R.drawable.btn_play_bg);
if (!isplaying)
handler.sendEmptyMessageDelayed(0, 60 * 1000);//暂停状态下,60秒后关闭Service
} else if (action.equals(MyAction.INTENT_UI_UPDATE)) {
views.setImageViewResource(R.id.widgetplaypause,
R.drawable.btn_pause_bg);
views.setTextViewText(R.id.musictitle,
APP.list.getTrackEntity().title);// 标题
views.setTextViewText(R.id.musicinfo,
APP.list.getTrackEntity().artist);// 艺术家和专辑
}
appWidgetManger.updateAppWidget(appIds, views);
super.onReceive(context, intent);
}
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
final int N = appWidgetIds.length;
for (int i = 0; i < N; i++) {
int appWidgetId = appWidgetIds[i];
updateAppWidget(context, appWidgetManager, appWidgetId);
}
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
}