音乐播放器widget 后传 - widget的构建

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

音乐播放器widget 后传

 

 

[功能]

上次讲的播放器的构建 这次讨论widget 的构建

 

 

为了不使得太过臃肿 该widget得功能也比较简单:

写道
1. 用于 换曲 功能
2. 显示从MediaPlayerService 发过来的字串

 

写道
以2个功能为代表 演示:

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 里面完成

写道
UpdateService 的工作:

1. 设立 "换曲" Button 的 sendBroadcast() 工作

2. 定义BroadcastReceiver 用于接收Text 并显示之

 

写道
在 widget 上设立监听器 不能像在Activity中那样 其主要通过PendingIntent完成

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!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值