音乐播放器widget 后传
[功能]
上次讲的播放器的构建 这次讨论widget 的构建
为了不使得太过臃肿 该widget得功能也比较简单:
2. 显示从MediaPlayerService 发过来的字串
widget 与 后台service 的交互
[代码 步骤]
1. 构建 widget 所需界面 musicplayerlayout.xml: 1 Buttoon用于换曲 1TextView显示字串
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:id="@+id/next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Next!"
/>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
2. 设定 widget 的属性 musicplayersetting.xml 比如:窗口大小设定 刷新率 所需界面
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="246dip"
android:minHeight="22dip"
android:updatePeriodMillis="1000"
android:initialLayout="@layout/musicplayerlayout" />
3. AppWidgetProvider 因为一些原因 所以觉得把具体的更新 放在 UpdateService 里面完成
1. 设立 "换曲" Button 的 sendBroadcast() 工作
2. 定义BroadcastReceiver 用于接收Text 并显示之
PendingIntent pi = PendingIntent.getBroadcast(context, requestCode, intent, flags)
主要是通过 Intent 来启用相应功能
1. Activity 跳转 类似于Activity.startActivity()
2. 发送Broadcast 类似于Activity.sendBroadcast()
3. 至于Broadcast 接收 和 Activity中一样
1. 设立 "换曲" Button 的 sendBroadcast() 工作
public void setViewBroadcastClickListener(RemoteViews remte,int id,String s){
Intent i = new Intent(s);
PendingIntent pi = PendingIntent.getBroadcast(this,1,i,0);
remte.setOnClickPendingIntent(id, pi);
}
2. 定义BroadcastReceiver 用于接收Text 并显示之
public class MusicWidgetListenerHelper extends BroadcastReceiver {
Context context;
MusicWidgetListenerHelper listener;
//construct
public MusicWidgetListenerHelper(Context c){
context = c;
//to instance it
listener = this;
}
public void registerAction(String action){
IntentFilter filter = new IntentFilter();
filter.addAction(action);
context.registerReceiver(listener,filter);
}
@Override
public void onReceive(Context arg0, Intent arg1) {
// TODO Auto-generated method stub
Bundle b = arg1.getExtras();
if(b.containsKey(MusicPlayerHelper.Message_MusicPlayer_Text)){
String string = b.getString(MusicPlayerHelper.Message_MusicPlayer_Text);
updateMusicText(string);
}
}
}
public void updateMusicText(String s){
remote.setTextViewText(R.id.text,s);
//做界面改动 必须调用updateAppWidget() 刷新
ComponentName thisWidget =
new ComponentName(this, MusicPlayerWidget.class);
AppWidgetManager manager =
AppWidgetManager.getInstance(this);
manager.updateAppWidget(thisWidget, remote);
}
//做界面改动 必须调用updateAppWidget() 刷新
ComponentName thisWidget =
new ComponentName(this, MusicPlayerWidget.class);
AppWidgetManager manager =
AppWidgetManager.getInstance(this);
manager.updateAppWidget(thisWidget, remote);
3. 至此 widget 功能也完成了 看看emulator 运行截图吧
* 开始运行效果

2. 按下 Button "Next!" 后的效果 为了看出效果 注意其右边Text 的变化

done!
本文介绍了一个简单的音乐播放器Widget的构建过程,包括界面设计、功能实现及与后台Service的交互方式。Widget具备换曲与显示播放信息的功能。
187

被折叠的 条评论
为什么被折叠?



