Android桌面组件Widge开发及应用
2012-07-10 10:44
225 查看
Android桌面组件Widge开发是一种很小的应用程序,每一个Widget就是一个BroadcastReceiver,然而最重要尤其是相关注册,
下面是本次代码核心注册
</activity>
<activity
android:name=".TargetActivity"
android:label="TargetActivity"></activity>
<receiver
android:name="AppwidgetTest">
<intent-filter>
<action
android:name="android.appwidget.action.APPWIDGET_UPDATE"
/>
</intent-filter>
<intent-filter>
<action
android:name="zzy.appwidget03.UPDATE_APP_WIDGET"
/>
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/appwidget_info"
/>
</receiver>
</application>
注册其中 metadata来描述Widget的细节,appwidget_info是我门要要编写描述Widget下面将会提到解释TargetActivity使我新建的一个Activity
用来当我点击桌面widget中的Button时跳转的页面的Activity
其余
的都是必不可少的申明!
。
首先
现在新建一个XMl包在Layout中,里面添加一个XMl文件
为appwidget_info文件用来设置桌面上的widget里面的内容设置桌面组件的属性:
<?xml
version="1.0"
encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="100dp"
android:minHeight="50dp"
android:updatePeriodMillis="86400000"
android:initialLayout="@layout/appwidget"
>
</appwidget-provider>
android:minWidth,android:minHeight,android:updatePeriodMillis
分别是指桌面组件的最小宽度和最小高度,最后一个表示其自动更新的时间
上面的appwidget是在layout中新建的一个XML文件
具体设置
桌面组件的布局文件
<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:id="@+id/widgetTextId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="widget test"
android:background="#000000"
/>
<ImageView
android:id="@+id/imageId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon_sina"
/>
<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="测试按钮"
/>
<Button
android:id="@+id/button2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="更换图片"
/>
</LinearLayout>
然后要建立一个widget,创建一个类,让其继承AppWidgetProvider,在AppWidgetProvider中有许多方法onUpdate,onDelete,onEnabled,onDisabled方法要知道这些方法
的用处:代码
public class AppwidgetTest extends AppWidgetProvider
{
private static final String UPDATE__ACTION="zzy.appwidget03.UPDATE_APP_WIDGET";
public void onReceive(Context context, Intent intent)
{
// TODO Auto-generated method stub
String action=intent.getAction();
if (action.equals(UPDATE__ACTION))
{
//先得到remoteView
RemoteViews remoteViews=new RemoteViews(context.getPackageName()
, R.layout.appwidget);
//更新图面显示
remoteViews.setImageViewResource(R.id.imageId,R.drawable.icon_twitter);
remoteViews.setTextViewText(R.id.widgetTextId, "你好");
AppWidgetManager appWidgetManager=AppWidgetManager.getInstance(context);
// 得到整个widget
ComponentName componentName=new ComponentName(context,AppwidgetTest.class);
//开始更新widget
appWidgetManager.updateAppWidget(componentName, remoteViews);
}
else {
super.onReceive(context, intent);
}
}
其中这次我是通过广播机制,当我们点击下面方法中的Button(变换图片)的时候,我设置此时的按钮当以广播的形式发送,通过上面Activity中receive()方法来接受Intent类型
先得到整个Widget
然后通过updateAppWidget方法构建一个remoteVtew用来对整个组件的更新,上面的代码最终要的还有ComponentName来表示应用程序组件的名字
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
Intent intent=new Intent();
Intent intent2=new Intent(context,TargetActivity.class);
intent.setAction(UPDATE__ACTION);
//设置pendingIntent
得到相关Intent信息
PendingIntent pendingIntent=PendingIntent.getBroadcast(context,-1, intent, 0);
PendingIntent pendingIntent2=PendingIntent.getActivity(context,0, intent2, 0);
//得到当前从context
得到设置的桌面组件
RemoteViews remoteViews=new RemoteViews(context.getPackageName(),R.layout.appwidget);
//设置监听器
第一个为button1
第二个人设置调专页面的pendingIntent
remoteViews.setOnClickPendingIntent(R.id.button2, pendingIntent);
remoteViews.setOnClickPendingIntent(R.id.button1, pendingIntent2);
//更新AppWidget
//第一个参数用于指定被更新AppWidget的ID
appWidgetManager.updateAppWidget(appWidgetIds,remoteViews);
System.out.println("onupdate");
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
System.out.println("onDeleted");
super.onDeleted(context, appWidgetIds);
}
@Override
public void onDisabled(Context context) {
System.out.println("onDisabled");
super.onDisabled(context);
}
@Override
public void onEnabled(Context context) {
System.out.println("onEnabled");
super.onEnabled(context);
}
}
上面的代码是AppWidget组基本的应用
也是我们必须掌握的内容,定义俩个按钮,分别对俩个按钮设置俩个Intent,然后是PendingIntent的应用,个人感觉这个PendingIntent的应用就像是对Intent的包裹一样,当我们用到的时候再将其拿出来应用,俩个PendingIntent分别对应着俩个不同Action。RemoteViews被包装成一个layout和一些特定的内容发送并显示到桌面上。
最后,整体感觉AppWidget
用处就是像那个播放歌曲的后台显示信息或者是日历事件一类,然后自己可以对拖到桌面上显示的那个进行操作。
下面是本次代码核心注册
</activity>
<activity
android:name=".TargetActivity"
android:label="TargetActivity"></activity>
<receiver
android:name="AppwidgetTest">
<intent-filter>
<action
android:name="android.appwidget.action.APPWIDGET_UPDATE"
/>
</intent-filter>
<intent-filter>
<action
android:name="zzy.appwidget03.UPDATE_APP_WIDGET"
/>
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/appwidget_info"
/>
</receiver>
</application>
注册其中 metadata来描述Widget的细节,appwidget_info是我门要要编写描述Widget下面将会提到解释TargetActivity使我新建的一个Activity
用来当我点击桌面widget中的Button时跳转的页面的Activity
其余
的都是必不可少的申明!
。
首先
现在新建一个XMl包在Layout中,里面添加一个XMl文件
为appwidget_info文件用来设置桌面上的widget里面的内容设置桌面组件的属性:
<?xml
version="1.0"
encoding="utf-8"?>
<appwidget-provider
xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="100dp"
android:minHeight="50dp"
android:updatePeriodMillis="86400000"
android:initialLayout="@layout/appwidget"
>
</appwidget-provider>
android:minWidth,android:minHeight,android:updatePeriodMillis
分别是指桌面组件的最小宽度和最小高度,最后一个表示其自动更新的时间
上面的appwidget是在layout中新建的一个XML文件
具体设置
桌面组件的布局文件
<?xml
version="1.0"
encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<TextView
android:id="@+id/widgetTextId"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="widget test"
android:background="#000000"
/>
<ImageView
android:id="@+id/imageId"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon_sina"
/>
<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="测试按钮"
/>
<Button
android:id="@+id/button2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="更换图片"
/>
</LinearLayout>
然后要建立一个widget,创建一个类,让其继承AppWidgetProvider,在AppWidgetProvider中有许多方法onUpdate,onDelete,onEnabled,onDisabled方法要知道这些方法
的用处:代码
public class AppwidgetTest extends AppWidgetProvider
{
private static final String UPDATE__ACTION="zzy.appwidget03.UPDATE_APP_WIDGET";
public void onReceive(Context context, Intent intent)
{
// TODO Auto-generated method stub
String action=intent.getAction();
if (action.equals(UPDATE__ACTION))
{
//先得到remoteView
RemoteViews remoteViews=new RemoteViews(context.getPackageName()
, R.layout.appwidget);
//更新图面显示
remoteViews.setImageViewResource(R.id.imageId,R.drawable.icon_twitter);
remoteViews.setTextViewText(R.id.widgetTextId, "你好");
AppWidgetManager appWidgetManager=AppWidgetManager.getInstance(context);
// 得到整个widget
ComponentName componentName=new ComponentName(context,AppwidgetTest.class);
//开始更新widget
appWidgetManager.updateAppWidget(componentName, remoteViews);
}
else {
super.onReceive(context, intent);
}
}
其中这次我是通过广播机制,当我们点击下面方法中的Button(变换图片)的时候,我设置此时的按钮当以广播的形式发送,通过上面Activity中receive()方法来接受Intent类型
先得到整个Widget
然后通过updateAppWidget方法构建一个remoteVtew用来对整个组件的更新,上面的代码最终要的还有ComponentName来表示应用程序组件的名字
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
Intent intent=new Intent();
Intent intent2=new Intent(context,TargetActivity.class);
intent.setAction(UPDATE__ACTION);
//设置pendingIntent
得到相关Intent信息
PendingIntent pendingIntent=PendingIntent.getBroadcast(context,-1, intent, 0);
PendingIntent pendingIntent2=PendingIntent.getActivity(context,0, intent2, 0);
//得到当前从context
得到设置的桌面组件
RemoteViews remoteViews=new RemoteViews(context.getPackageName(),R.layout.appwidget);
//设置监听器
第一个为button1
第二个人设置调专页面的pendingIntent
remoteViews.setOnClickPendingIntent(R.id.button2, pendingIntent);
remoteViews.setOnClickPendingIntent(R.id.button1, pendingIntent2);
//更新AppWidget
//第一个参数用于指定被更新AppWidget的ID
appWidgetManager.updateAppWidget(appWidgetIds,remoteViews);
System.out.println("onupdate");
super.onUpdate(context, appWidgetManager, appWidgetIds);
}
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
System.out.println("onDeleted");
super.onDeleted(context, appWidgetIds);
}
@Override
public void onDisabled(Context context) {
System.out.println("onDisabled");
super.onDisabled(context);
}
@Override
public void onEnabled(Context context) {
System.out.println("onEnabled");
super.onEnabled(context);
}
}
上面的代码是AppWidget组基本的应用
也是我们必须掌握的内容,定义俩个按钮,分别对俩个按钮设置俩个Intent,然后是PendingIntent的应用,个人感觉这个PendingIntent的应用就像是对Intent的包裹一样,当我们用到的时候再将其拿出来应用,俩个PendingIntent分别对应着俩个不同Action。RemoteViews被包装成一个layout和一些特定的内容发送并显示到桌面上。
最后,整体感觉AppWidget
用处就是像那个播放歌曲的后台显示信息或者是日历事件一类,然后自己可以对拖到桌面上显示的那个进行操作。
相关文章推荐
- Android应用开发—Intent组件详解
- 【Android 应用开发】Android UI 设计之 TextView EditText 组件属性方法最详细解析
- 理解与应用Android桌面组件AppWidget
- Android应用常规开发技巧——善用组件生命周期
- 【Android 应用开发】Android UI 设计之 TextView EditText 组件属性方法最详细解析
- android应用开发详解(八)------------常用组件之AutoCompleteTextView(续)
- 开发APP的那些组件---->>>>------Android中BroadcastReceiver的应用
- android应用开发详解(八)---------------常用组件之选项卡Tab的三种用法(续)
- Android桌面组件App Widget开发三步走
- android应用开发之桌面快捷方式
- Android实战开发二,ListView组件应用,适配器的三种效用
- Android特色开发之桌面组件
- android应用开发详解(八)-------------常用组件
- 【Android 应用开发】 自定义组件 宽高适配方法, 手势监听器操作组件, 回调接口维护策略, 绘制方法分析 -- 基于 WheelView 组件分析自定义组件
- 【Android应用开发技术:应用组件】Fragment基本原理
- Android Launcher桌面应用快捷方式的开发
- 【Android应用开发技术:应用组件】Intent基本原理
- 【Android 应用开发】Android - 按钮组件详解
- Android特色开发之桌面组件 推荐
- Android特色开发之桌面组件