1.AppWidgetProviderInfo对象
这个对象为AppWidget提供元数据,包括布局、更新频率等信息,这个对象定义在xml文件中,不需要自己生成,时系统自己生成的。
2.AppWidgetProvider
这个类定义了AppWidget的基本生命周期函数,具体如下:
onReceive(Context, Intent) 接收广播事件
onUpdate(Context , AppWidgetManager, int[] appWidgetIds) 到达指定的更新时间或用户向桌面添加widget时候调用
onEnabled(Context) 当AppWidget实例第一次被创建时调用
onDeleted(Context, int[] appWidgetIds) 当AppWidget被删除时调用
onDisabled(Context) 当最后一个AppWidget被删除时调用
四.创建AppWidget的基本步骤
1.定义AppWidgetProviderInfo:在res中新建文件夹xml,在其中定义AppWidget_ProviderInfo.xml文件,主要设置的参数如下:
minWidth: 定义Wdiget组件的宽度
minHeight: 定义Wdiget组件的高度
updatePeriodMillis: 更新的时间周期
initialLayout: Widget的布局文件
代码示例:
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="80dp"
android:minHeight="32dp"
android:updatePeriodMillis="86400000"
android:initialLayout="@layout/appwidgetlayout" >
</appwidget-provider>
其中的appwidgetlayout为layout文件夹下面新建一个xml文件,在这个文件中描述了appWidget的控件和布局等等信息,如:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/appbackground"
android:gravity="center">
<TextView
android:id="@+id/title"
android:layout_width="90dip"
android:layout_height="wrap_content"
android:text="无歌曲播放"
android:textColor="#ffffff"
android:textSize="15dip"
android:layout_marginLeft="30dip"
/>
<ImageButton
android:id="@+id/lastButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/latest_selecor"
android:layout_marginRight="5dip"
/>
<ImageButton
android:id="@+id/playButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dip"
android:layout_marginLeft="5dip"
/>
<ImageButton
android:id="@+id/nextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/next_selecor"
android:layout_marginLeft="5dip"
/>
</LinearLayout>
2.为AppWidget指定布局和样式,即此AppWidget在手机桌面上显示的样式,其实就是一个布局xml文件。需要注意的是使用的组件必须是RemoteViews所支持的,目前原生API中支持的组件如下:
FrameLayout
LinearLayout
RelativeLayout
AnalogClock
Button
Chronmeter
ImageButton
ImageView
ProgressBar
TextView
如果使用了除此之外的组件,则在Widget创建时会导致android.view.InflateExceptionn异常。这就导致有一些功能或样式无法实现,如很基本的list或文本编辑框都是无法直接实现的。
3.实现AppWidgetProvider。
覆写其中的回调函数,后边会详细介绍。
4.在AndroidManifest.xml中声明(用receiver标签声明)
<receiver android:name="music.dreamer.useful.AppWidget">
<meta-data android:name="android.appwidget.provider" //name固定这么写
android:resource="@xml/appwidgetprovider"/>//在xml文件夹下建立的AppWidgetProviderInfo文件
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action> //接收什么样的广播,默认的action有4种,对应除onReceive外的4种生命周期函数,也可以自己写。自己写的如以下4个:
<action android:name="music.dreamer.playmusic"></action>
<action android:name="music.dreamer.pause"></action>
<action android:name="music.dreamer.play"></action>
<action android:name="music.dreamer.musictitle"></action>
</intent-filter>
</receiver>
五.在AppWidget中使用控件
1.一个重要的概念
AppWidget和其原本的App并不在同一个进程中,而是运行在HomeScreen进程当中,因此,在控件监听器的绑定,更新等操作都会与以前基本的方法有所不同。
2.PendingIntent
(1)概念
PendingIntent是一个特殊的Intent,实际上它像一个邮包,其中包裹着真正的Intent,当邮包未打开时,Intent是被“挂起”的,所以并不执行,只有当邮包拆开时才会执行。它与Intent的区别在于:Intent 是及时启动,intent 随所在的activity 消失而消失。
PendingIntent 可以看作是对intent的包装,通常通过getActivity,getBroadcast ,getService来得到pendingintent的实例,当前activity并不能马上启动它所包含的intent,而是在外部执行 pendingintent时,调用intent的。正由于pendingintent中 保存有当前App的Context,使它赋予外部App一种能力,使得外部App可以如同当前App一样的执行pendingintent里的 Intent, 就算在执行时当前App已经不存在了,也能通过存在pendingintent里的Context照样执行Intent。另外还可以处理intent执行后的操作。常和alermanger 和notificationmanager一起使用。
Intent一般是用作Activity、Sercvice、BroadcastReceiver之间传递数据,而Pendingintent,一般用在 Notification上,可以理解为延迟执行的intent,PendingIntent是对Intent一个包装。
(2)执行过程
进程A创建PendingIntent,发送给进程B,进程B此事并不执行,直到用户出发某一事件时,包裹被拆开,里面的Intent真正执行。所以Intent什么时候被执行是不知道的,由用户出发事件来决定,整个过程类似回调函数的原理。
(3)创建
有三种方法创建PendingIntent:
getActivity(Context context,int requestCode,Intent intent,int flags) 这时的PendingIntent作用是启动一个新的Activity
getBroadcast(Context context,int requestCode,Intent intent,int flags) 这时的PendingIntent作用是发送一个广播
getService(Context context,int requestCode,Intent intent,int flags) 这时的PendingIntent作用是启动一个Service
3.RemoteViews
(1)RemoteViews表示了一系列view对象,即AppWidget所有的控件。
(2)RemoteViews所标示的对象都运行在另外的进程中。
(3)应用
RemoteViews.setOnClickPendingIntent(R.id.widgetButtonId,pendingIntent); //第一个参数就是需要绑定的控件,
//第二个参数是点击后触发执行的PendingIntent。
4.为控件绑定监听器的实现(点击按钮,开启新的Activity)
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) { //appWidgetManager用来管理appWidget,而appWidgetIds[]指的是,每当新建一个appWidget,
//系统就会给新建的appWidget一个ID,而这个数组中储存的就是这些ID。
// TODO Auto-generated method stub
final int N = appWidgetIds.length;
for (int i = 0; i < N; i++) {
//创建Intent 对象
Intent intent=new Intent(context,TargetActivity,.class);
//创建PendingIntent 对象,即把intent装进pendingIntent中
PendingIntent pendingIntent=new PendingIntent.getActivity(context,0,intent,0);
//通过布局文件得到RemoteViews 对象
RemoteViews remoteViews=new RemoteViews (context.getPackageName,R.layout.my_AppWidget);
//绑定监听事件,即当widgetButtonId控件有onClick事件时,会执行pendingIntent(就是之前所说的拆邮包)
remoteViews.setOnClickPendingIntent(R.id.widgetButtonId,pendingIntent);
//使用appWidgetManager更新AppWidge。第一个参数指明更新的是哪一个appWidgetId,第二个参数指明了更新的远程Views。
appWidgetManager.updateAppWidget(appWidgetIds[i],remoteViews);
}
super.onUpdate(context,appWidgetManager,appWidgetIds);
}
六.接收AppWidget中的广播(AppWidget与AppWidgetProvider的互动)
1.机制
其实,AppWidgetProvider就是一个广播接收器。在AppWidgetProvider中,pendingIntent传来后由onReceive方法接收,之后检查intent对象中的action,由action来决定分发给哪一个函数。Android默认设置了四种action,对应了除onReceive外剩下的四种方法。因此,我们可以理解为AppWidgetProvider中的方法其实又依赖于onReceive。
2.实现步骤
(1)在AndroidManifest.xml中为AppWidgetProvider注册intent-filter,如前介绍。
(2)使用getBroadcast方法创建一个PendingIntent对象。
(2)为AppWidget中的控件注册处理器(即绑定监听器)。
(4)在onReceive方法中接收广播消息。
3.代码示例(本人写的更新播放按钮的WIDGET)
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
Log.i("info", "onUpdate...");
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidgetlayout);
/*设置播放键的动作*/
views.setImageViewResource(R.id.playButton, R.drawable.play_selecor);
Intent playIntent = new Intent(PLAY_ACTION);
//设置pendingIntent的作用
PendingIntent playPending = PendingIntent.getBroadcast(context, 0, playIntent, 0);
views.setOnClickPendingIntent(R.id.playButton, playPending);
/*设置上一首按钮的动作*/
Intent lastIntent = new Intent(lAST_ACTION);
PendingIntent lastPending = PendingIntent.getBroadcast(context, 0, lastIntent, 0);
views.setOnClickPendingIntent(R.id.lastButton, lastPending);
/*设置下一首按钮的动作*/
Intent nextIntent = new Intent(NEXT_ACTION);
PendingIntent nextPending = PendingIntent.getBroadcast(context, 0, nextIntent, 0);
views.setOnClickPendingIntent(R.id.nextButton, nextPending);
/*获取正在播放的音乐名*/
Intent intent = new Intent();
intent.setAction(START_APP);
context.sendBroadcast(intent);
//使用appWidgetManager更新AppWidge。第一个参数指明更新的是哪一个appWidgetId,第二个参数指明了更新的远程Views。
appWidgetManager.updateAppWidget(appWidgetIds, views);
}
之后覆写onReceive方法,实现接收广播后需要执行的操作即可(如“七”将要介绍)。当点击button时,会触发pendingIntent的执行,这时候会发送一个广播,而onReceive会接收广播并执行相应操作。
七.更新AppWidget中控件的状态
1.AppWidget中的更新操作是使用RemoteViews的一系列方法进行的。(比如更换图片:RemoteViews.setImageViewResource等)
2.更新后应记得使用AppWidgetManager通知AppWidget进行更新。
3.代码示例
说明:这里实现的即是点击某按钮,发送一个广播,在onReceive方法里实现更新操作,即需要覆写onReceive方法。
@Override
public void onReceive(Context context, Intent intent) {
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidgetlayout);
if (intent.getAction().equals("music.dreamer.pause")){
views.setImageViewResource(R.id.playButton, R.drawable.play_selecor);
} else if (intent.getAction().equals("music.dreamer.play")){
//将id为playButton的控件中的图片更新为pause_selecor
views.setImageViewResource(R.id.playButton, R.drawable.pause_selecor);
} else if (intent.getAction().equals("music.dreamer.musictitle")){
String musicName = intent.getExtras().getString("title");
if (musicName.length()>6){
musicName = musicName.substring(0, 5)+"...";
}
views.setTextViewText(R.id.title, musicName);
}
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName componentName = new ComponentName(context,AppWidget.class);
//通知AppWidgetProvider更新
appWidgetManager.updateAppWidget(componentName, views);
Log.i("info", "onReceive...");
super.onReceive(context, intent);
}
这个对象为AppWidget提供元数据,包括布局、更新频率等信息,这个对象定义在xml文件中,不需要自己生成,时系统自己生成的。
2.AppWidgetProvider
这个类定义了AppWidget的基本生命周期函数,具体如下:
onReceive(Context, Intent) 接收广播事件
onUpdate(Context , AppWidgetManager, int[] appWidgetIds) 到达指定的更新时间或用户向桌面添加widget时候调用
onEnabled(Context) 当AppWidget实例第一次被创建时调用
onDeleted(Context, int[] appWidgetIds) 当AppWidget被删除时调用
onDisabled(Context) 当最后一个AppWidget被删除时调用
四.创建AppWidget的基本步骤
1.定义AppWidgetProviderInfo:在res中新建文件夹xml,在其中定义AppWidget_ProviderInfo.xml文件,主要设置的参数如下:
minWidth: 定义Wdiget组件的宽度
minHeight: 定义Wdiget组件的高度
updatePeriodMillis: 更新的时间周期
initialLayout: Widget的布局文件
代码示例:
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
android:minWidth="80dp"
android:minHeight="32dp"
android:updatePeriodMillis="86400000"
android:initialLayout="@layout/appwidgetlayout" >
</appwidget-provider>
其中的appwidgetlayout为layout文件夹下面新建一个xml文件,在这个文件中描述了appWidget的控件和布局等等信息,如:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/appbackground"
android:gravity="center">
<TextView
android:id="@+id/title"
android:layout_width="90dip"
android:layout_height="wrap_content"
android:text="无歌曲播放"
android:textColor="#ffffff"
android:textSize="15dip"
android:layout_marginLeft="30dip"
/>
<ImageButton
android:id="@+id/lastButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/latest_selecor"
android:layout_marginRight="5dip"
/>
<ImageButton
android:id="@+id/playButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="5dip"
android:layout_marginLeft="5dip"
/>
<ImageButton
android:id="@+id/nextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/next_selecor"
android:layout_marginLeft="5dip"
/>
</LinearLayout>
2.为AppWidget指定布局和样式,即此AppWidget在手机桌面上显示的样式,其实就是一个布局xml文件。需要注意的是使用的组件必须是RemoteViews所支持的,目前原生API中支持的组件如下:
FrameLayout
LinearLayout
RelativeLayout
AnalogClock
Button
Chronmeter
ImageButton
ImageView
ProgressBar
TextView
如果使用了除此之外的组件,则在Widget创建时会导致android.view.InflateExceptionn异常。这就导致有一些功能或样式无法实现,如很基本的list或文本编辑框都是无法直接实现的。
3.实现AppWidgetProvider。
覆写其中的回调函数,后边会详细介绍。
4.在AndroidManifest.xml中声明(用receiver标签声明)
<receiver android:name="music.dreamer.useful.AppWidget">
<meta-data android:name="android.appwidget.provider" //name固定这么写
android:resource="@xml/appwidgetprovider"/>//在xml文件夹下建立的AppWidgetProviderInfo文件
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE"></action> //接收什么样的广播,默认的action有4种,对应除onReceive外的4种生命周期函数,也可以自己写。自己写的如以下4个:
<action android:name="music.dreamer.playmusic"></action>
<action android:name="music.dreamer.pause"></action>
<action android:name="music.dreamer.play"></action>
<action android:name="music.dreamer.musictitle"></action>
</intent-filter>
</receiver>
五.在AppWidget中使用控件
1.一个重要的概念
AppWidget和其原本的App并不在同一个进程中,而是运行在HomeScreen进程当中,因此,在控件监听器的绑定,更新等操作都会与以前基本的方法有所不同。
2.PendingIntent
(1)概念
PendingIntent是一个特殊的Intent,实际上它像一个邮包,其中包裹着真正的Intent,当邮包未打开时,Intent是被“挂起”的,所以并不执行,只有当邮包拆开时才会执行。它与Intent的区别在于:Intent 是及时启动,intent 随所在的activity 消失而消失。
PendingIntent 可以看作是对intent的包装,通常通过getActivity,getBroadcast ,getService来得到pendingintent的实例,当前activity并不能马上启动它所包含的intent,而是在外部执行 pendingintent时,调用intent的。正由于pendingintent中 保存有当前App的Context,使它赋予外部App一种能力,使得外部App可以如同当前App一样的执行pendingintent里的 Intent, 就算在执行时当前App已经不存在了,也能通过存在pendingintent里的Context照样执行Intent。另外还可以处理intent执行后的操作。常和alermanger 和notificationmanager一起使用。
Intent一般是用作Activity、Sercvice、BroadcastReceiver之间传递数据,而Pendingintent,一般用在 Notification上,可以理解为延迟执行的intent,PendingIntent是对Intent一个包装。
(2)执行过程
进程A创建PendingIntent,发送给进程B,进程B此事并不执行,直到用户出发某一事件时,包裹被拆开,里面的Intent真正执行。所以Intent什么时候被执行是不知道的,由用户出发事件来决定,整个过程类似回调函数的原理。
(3)创建
有三种方法创建PendingIntent:
getActivity(Context context,int requestCode,Intent intent,int flags) 这时的PendingIntent作用是启动一个新的Activity
getBroadcast(Context context,int requestCode,Intent intent,int flags) 这时的PendingIntent作用是发送一个广播
getService(Context context,int requestCode,Intent intent,int flags) 这时的PendingIntent作用是启动一个Service
3.RemoteViews
(1)RemoteViews表示了一系列view对象,即AppWidget所有的控件。
(2)RemoteViews所标示的对象都运行在另外的进程中。
(3)应用
RemoteViews.setOnClickPendingIntent(R.id.widgetButtonId,pendingIntent); //第一个参数就是需要绑定的控件,
//第二个参数是点击后触发执行的PendingIntent。
4.为控件绑定监听器的实现(点击按钮,开启新的Activity)
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) { //appWidgetManager用来管理appWidget,而appWidgetIds[]指的是,每当新建一个appWidget,
//系统就会给新建的appWidget一个ID,而这个数组中储存的就是这些ID。
// TODO Auto-generated method stub
final int N = appWidgetIds.length;
for (int i = 0; i < N; i++) {
//创建Intent 对象
Intent intent=new Intent(context,TargetActivity,.class);
//创建PendingIntent 对象,即把intent装进pendingIntent中
PendingIntent pendingIntent=new PendingIntent.getActivity(context,0,intent,0);
//通过布局文件得到RemoteViews 对象
RemoteViews remoteViews=new RemoteViews (context.getPackageName,R.layout.my_AppWidget);
//绑定监听事件,即当widgetButtonId控件有onClick事件时,会执行pendingIntent(就是之前所说的拆邮包)
remoteViews.setOnClickPendingIntent(R.id.widgetButtonId,pendingIntent);
//使用appWidgetManager更新AppWidge。第一个参数指明更新的是哪一个appWidgetId,第二个参数指明了更新的远程Views。
appWidgetManager.updateAppWidget(appWidgetIds[i],remoteViews);
}
super.onUpdate(context,appWidgetManager,appWidgetIds);
}
六.接收AppWidget中的广播(AppWidget与AppWidgetProvider的互动)
1.机制
其实,AppWidgetProvider就是一个广播接收器。在AppWidgetProvider中,pendingIntent传来后由onReceive方法接收,之后检查intent对象中的action,由action来决定分发给哪一个函数。Android默认设置了四种action,对应了除onReceive外剩下的四种方法。因此,我们可以理解为AppWidgetProvider中的方法其实又依赖于onReceive。
2.实现步骤
(1)在AndroidManifest.xml中为AppWidgetProvider注册intent-filter,如前介绍。
(2)使用getBroadcast方法创建一个PendingIntent对象。
(2)为AppWidget中的控件注册处理器(即绑定监听器)。
(4)在onReceive方法中接收广播消息。
3.代码示例(本人写的更新播放按钮的WIDGET)
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
Log.i("info", "onUpdate...");
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidgetlayout);
/*设置播放键的动作*/
views.setImageViewResource(R.id.playButton, R.drawable.play_selecor);
Intent playIntent = new Intent(PLAY_ACTION);
//设置pendingIntent的作用
PendingIntent playPending = PendingIntent.getBroadcast(context, 0, playIntent, 0);
views.setOnClickPendingIntent(R.id.playButton, playPending);
/*设置上一首按钮的动作*/
Intent lastIntent = new Intent(lAST_ACTION);
PendingIntent lastPending = PendingIntent.getBroadcast(context, 0, lastIntent, 0);
views.setOnClickPendingIntent(R.id.lastButton, lastPending);
/*设置下一首按钮的动作*/
Intent nextIntent = new Intent(NEXT_ACTION);
PendingIntent nextPending = PendingIntent.getBroadcast(context, 0, nextIntent, 0);
views.setOnClickPendingIntent(R.id.nextButton, nextPending);
/*获取正在播放的音乐名*/
Intent intent = new Intent();
intent.setAction(START_APP);
context.sendBroadcast(intent);
//使用appWidgetManager更新AppWidge。第一个参数指明更新的是哪一个appWidgetId,第二个参数指明了更新的远程Views。
appWidgetManager.updateAppWidget(appWidgetIds, views);
}
之后覆写onReceive方法,实现接收广播后需要执行的操作即可(如“七”将要介绍)。当点击button时,会触发pendingIntent的执行,这时候会发送一个广播,而onReceive会接收广播并执行相应操作。
七.更新AppWidget中控件的状态
1.AppWidget中的更新操作是使用RemoteViews的一系列方法进行的。(比如更换图片:RemoteViews.setImageViewResource等)
2.更新后应记得使用AppWidgetManager通知AppWidget进行更新。
3.代码示例
说明:这里实现的即是点击某按钮,发送一个广播,在onReceive方法里实现更新操作,即需要覆写onReceive方法。
@Override
public void onReceive(Context context, Intent intent) {
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidgetlayout);
if (intent.getAction().equals("music.dreamer.pause")){
views.setImageViewResource(R.id.playButton, R.drawable.play_selecor);
} else if (intent.getAction().equals("music.dreamer.play")){
//将id为playButton的控件中的图片更新为pause_selecor
views.setImageViewResource(R.id.playButton, R.drawable.pause_selecor);
} else if (intent.getAction().equals("music.dreamer.musictitle")){
String musicName = intent.getExtras().getString("title");
if (musicName.length()>6){
musicName = musicName.substring(0, 5)+"...";
}
views.setTextViewText(R.id.title, musicName);
}
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName componentName = new ComponentName(context,AppWidget.class);
//通知AppWidgetProvider更新
appWidgetManager.updateAppWidget(componentName, views);
Log.i("info", "onReceive...");
super.onReceive(context, intent);
}
发表评论
-
ActivityGroup 替代tabActivity
2013-12-26 16:43 2544转载自http://www.cnblogs.com/answe ... -
Android实战技巧:为从右向左语言定义复杂字串
2013-09-04 17:37 1146我们所使用的语言,无论是中文还是英语, ... -
Android 5种方式存储数据:
2013-05-08 17:17 1106Android 提供了5种方式存储数据: --使用Shared ... -
Android系统主题设计和实现
2012-12-11 14:09 1498转自:http://www.apkbus.com/ ... -
Android实现DES对字符串加密
2012-09-02 14:15 17165import java.io.Unsuppor ... -
android综合
2012-08-02 16:25 15941 ,手动设置横竖屏 TestA ... -
onSaveInstanceState
2012-08-01 17:40 729@Override //存储 public void onSa ... -
处理多个Activity
2012-07-20 09:40 713public class LifecycleManager ... -
bitmap 和drawable 互相转换
2012-07-19 13:37 653// bitmap to drawable; Drawable ... -
设置壁纸的三种方法
2012-07-19 11:46 25331111111111111111111111111111111 ... -
sqlite数据库处理时间问题 和 日期时间函数
2012-06-27 10:36 22845首先,sqlite数据库在时间 ... -
app缓存管理
2012-06-27 10:25 1059无论大型或小型应用, ... -
Uri、UriMatcher、ContentUris类使用介绍&&Android应用间数据共享之ContentProvider
2012-05-24 15:50 4431Android应用开发中我们会经常用Uri进行数据的处理,下面 ... -
getWidth()为0
2012-04-12 10:06 2016一般在刚开始开发android时,会犯一个错误,即在View的 ... -
自定义View 及使用
2012-04-05 14:08 773可能是一直都在做Web的富客户端开发的缘故吧,在接触Andro ... -
搜索手机联系人所有字段
2012-03-28 15:54 1452想取手机联系人的有效字段,但是苦于找不到API表示的字段变量, ... -
Andoid2.X各字段意义
2012-03-28 14:59 1258ContactsContract.Contacts.TIMES ... -
SMS发送流程
2012-03-20 18:07 1262发短信流程: 1 afterTextChanged{mWork ... -
Android telephony MMS 学习笔记
2012-03-14 13:32 2885转载 http://blog.csdn.net/tjy1985 ... -
Android_Mms源代码接受短信流程
2012-03-14 13:27 978短信来了之后framework会发送广播 “android.p ...
相关推荐
第4章 天气预报WIDGET的设计 19 4.1 网络功能实现 19 4.1.1 标准Java接口 19 4.1.2 Apache接口 20 4.1.3 使用Java接口连接网络 23 4.2 XML解析的实现 23 4.3 制作WIDGET应用程序 27 4.3.1 源文件组织 29 4.3.2 类...
【Widget应用程序设计与实现】 Widget应用程序,又称为桌面小工具,是近年来在个人电脑和移动设备上广泛应用的一种轻量级应用程序。它们以小巧、便捷、高效的特点,为用户提供了丰富的功能,如天气预报、时钟、日历...
6. **主题和样式**:介绍如何与jQuery UI的主题系统集成,使组件可以无缝地融入到不同的页面设计中。 接下来,`AWD Widget Guidelines.docx`可能涵盖了更具体的开发指导,如“先进、可工作、可发现”的原则。这些...
本项目“Android应用源码Widget炫酷特效 (宏基扇子型效果)”显然着重于展示一种独特且吸引人的Widget设计,即“宏基扇子型效果”。这种效果通常涉及到动态的动画和视觉元素,为用户提供一种新颖的交互体验。 1. **...
【App Widget设计与实现】 Android平台上的App Widget是桌面小部件的一种形式,它允许开发者创建可在用户主屏幕上显示和交互的轻量级组件。这些组件通常提供应用的主要功能的快捷方式或者简化的视图,无需打开整个...
在Android应用开发中,Widget小组件是用户界面的重要组成部分,它们允许用户在主屏幕上与应用程序进行交互,而无需实际打开应用。本项目是针对Android Widget小组件开发的一个毕业设计示例,适合学习和理解Android...
3. **布局文件**: 创建一个XML布局文件(如`app_widget_layout.xml`)来设计AppWidget的界面。这通常包含一些View组件,如TextView、Button等,这些组件将显示在主屏幕上。 4. **更新机制**: 由于AppWidget不能像...
5. **发布与更新**: 将Widget打包成可安装包,发布到应用市场或者自定义渠道,后期根据用户反馈进行迭代更新。 **Widget的应用场景** 1. **桌面小部件**: 在桌面环境下,Widget可以提供天气预报、日历、新闻速览等...
Android应用源码之Android小部件AppWidget.zip项目安卓应用源码下载Android应用源码之Android小部件AppWidget.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术...
用户可以直接在主屏幕上与Widget交互,而无需打开完整的应用程序。Widget可以显示静态信息,如天气预报,也可以动态更新,如音乐播放器控制。 二、Widget的组成 1. AppWidgetProvider:这是Widget的核心类,继承自...
对于Android开发者来说,使用Axure制作Widget原型可以帮助他们在设计阶段更好地理解和规划应用界面。这个“android axure widget包”就是一组专门针对Android平台的Axure组件库,由用户自己制作并分享。 标题中的...
5. **布局与视图**:展示了如何设计Widget的UI,使用RemoteViews来操作Widget的视图元素。 6. **用户交互**:讲解了如何处理Widget上的按钮点击和其他交互,通过PendingIntent将用户操作传递回应用程序。 7. **...
"Android平台天气预报Widget的设计与实现" Android 平台天气预报 Widget 的设计与实现是基于 Android 平台的开发技术的研究和分析。本文首先介绍了 Android 开发所需的基础知识,然后详细介绍了软件的具体实现过程...
本文首先介绍了Android开发的基础知识,包括系统架构、应用程序设计和开发工具,然后详细阐述了软件的具体实现过程,包括网络接口的使用、XML数据的获取与解析以及widget的制作技术。 1. 项目背景: 随着移动设备的...
### amixer、Widget与Controls详解 #### 一、概述 在深入探讨`amixer`、`widget`以及`controls`之前,我们先来简要了解一下它们的基本概念。 - **amixer**:`amixer`是ALSA (Advanced Linux Sound Architecture) ...
7. **毕业设计应用** - **应用场景**:例如,天气预报小部件、日程提醒小部件、音乐播放控制器等,可以提高用户体验,让用户快速访问功能。 - **论文撰写**:可以从设计思路、实现技术、用户交互等方面阐述App...
- **整合服务**:与热门应用和服务合作,将Widget作为内容和服务的入口。 总结,移动Widget在提供便捷信息获取和交互方面具有显著优势,但需不断适应用户需求变化和技术进步,以保持其在移动互联网中的活力和吸引...
Web技术在不断发展,Widget技术作为其中的一支重要力量,为网页和应用程序的交互与个性化提供了新的解决方案。在本文中,我们将深入探讨Widget技术的核心概念、工作原理,以及它如何应用于资源个性化获取,以提升...
在Android开发中,AppWidget是桌面小部件,它允许用户在主屏幕上与应用程序进行交互,而无需实际打开应用。Service是Android系统中的一个组件,它可以在后台长时间运行,执行一些耗时的操作,如音乐播放、数据同步等...
在Android平台上,Widget是应用程序的一种轻量级交互方式,它可以在用户的主屏幕上提供实时信息或者简单操作,无需打开完整应用。本课程设计的主题是“Android课程设计Widget电池插件”,旨在让学生掌握如何创建一个...