Android之桌面组件App Widget初探Word文档格式.docx
《Android之桌面组件App Widget初探Word文档格式.docx》由会员分享,可在线阅读,更多相关《Android之桌面组件App Widget初探Word文档格式.docx(10页珍藏版)》请在冰点文库上搜索。
![Android之桌面组件App Widget初探Word文档格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/74276680-72d6-4798-8197-729a5516fbce/74276680-72d6-4798-8197-729a5516fbce1.gif)
3、
2、App启动:
跟普通的Activity一样
以下为实现代码
main.xml布局文件,程序入口类的界面
my_layout.xml布局文件:
带一个图片的按钮
<
?
xmlversion="
1.0"
encoding="
utf-8"
>
LinearLayoutxmlns:
android="
android:
orientation="
vertical"
layout_width="
fill_parent"
layout_height="
<
TextViewandroid:
wrap_content"
text="
程序入口"
/>
/LinearLayout>
类MainActivity程序入口类
packagecom.ljq.activity;
importandroid.app.Activity;
importandroid.os.Bundle;
/**
*主程序入口类
*
*@authorjiqinlin
*
*/
publicclassMainActivityextendsActivity{
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
下面的代码才是开发AppWidget用到的代码
!
--<
ImageView
xmlns:
id="
@+id/imageView"
gravity="
center"
-->
Buttonandroid:
@+id/btn"
background="
@drawable/png1"
/>
my_appwidget.xml布局文件:
--
AppWidgetProvderInfo:
描述AppWidget的大小、更新频率和初始界面等信息,以XML文件形式存在于应用的res/xml/目录下。
注意:
SDK1.5之后此android:
updatePeriodMillis就失效了,要自己创建service更新
appwidget-provider
minWidth="
75dip"
minHeight="
45dip"
updatePeriodMillis="
1000"
initialLayout="
@layout/my_layout"
TestActivity类
importandroid.app.PendingIntent;
importandroid.appwidget.AppWidgetManager;
importandroid.appwidget.AppWidgetProvider;
importandroid.content.ComponentName;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.widget.RemoteViews;
*为手机添加桌面控件,当点击桌面控件时则进入主程序
*AppWidgetProvider:
继承自BroadcastRecevier,在AppWidget应用update、enable、disable和delete时接收通知。
*其中,onUpdate、onReceive是最常用到的方法,它们接收更新通知
publicclassTestActivityextendsAppWidgetProvider{
/**
*用来间隔的更新AppWidget,间隔时间用AppWidgetProviderInfo里的updatePeriodMillis属性定义(单位为毫秒)。
*注意:
updatePeriodMillis就失效了,要自己创建service更新。
*这个方法也会在用户添加AppWidget时被调用,因此它应该执行基础的设置,比如为视图定义事件处理器并启动一个临时的服务Service,如果需要的话。
*但是,如果你已经声明了一个配置活动,这个方法在用户添加AppWidget时将不会被调用,
*而只在后续更新时被调用。
配置活动应该在配置完成时负责执行第一次更新。
publicvoidonUpdate(Contextcontext,AppWidgetManagerappWidgetManager,int[]appWidgetIds){
System.out.println("
onUpdate"
);
//点击桌面组件时进入主程序入口
Intentintent=newIntent(context,MainActivity.class);
PendingIntentpendingIntent=PendingIntent.getActivity(context,0,intent,0);
//RemoteViews类描述了一个View对象能够显示在其他进程中,可以融合layout资源文件实现布局。
//虽然该类在android.widget.RemoteViews而不是appWidget下面,但在AndroidWidgets开发中会经常用到它,
//主要是可以跨进程调用(appWidget由一个服务宿主来统一运行的)。
RemoteViewsmyRemoteViews=newRemoteViews(context.getPackageName(),R.layout.my_layout);
//myRemoteViews.setImageViewResource(R.id.imageView,R.drawable.png1);
//设置布局控件的属性(要特别注意)
myRemoteViews.setOnClickPendingIntent(R.id.btn,pendingIntent);
ComponentNamemyComponentName=newComponentName(context,TestActivity.class);
//负责管理AppWidget,向AppwidgetProvider发送通知。
提供了更新AppWidget状态,获取已经安装的Appwidget提供信息和其他的相关状态
AppWidgetManagermyAppWidgetManager=AppWidgetManager.getInstance(context);
myAppWidgetManager.updateAppWidget(myComponentName,myRemoteViews);
*当AppWidget从宿主中删除时被调用。
publicvoidonDeleted(Contextcontext,int[]appWidgetIds){
onDeleted"
super.onDeleted(context,appWidgetIds);
*当一个AppWidget实例第一次创建时被调用。
*比如,如果用户添加两个AppWidget实例,只在第一次被调用。
*如果你需要打开一个新的数据库或者执行其他对于所有的AppWidget实例只需要发生一次的设置,
*那么这里是完成这个工作的好地方。
publicvoidonEnabled(Contextcontext){
onEnabled"
super.onEnabled(context);
*当你的AppWidget的最后一个实例被从宿主中删除时被调用。
你应该在onEnabled(Context)中做一些清理工作,比如删除一个临时的数据库
publicvoidonDisabled(Contextcontext){
onDisabled"
super.onDisabled(context);
*接收到每个广播时都会被调用,而且在上面的回调函数之前。
*你通常不需要实现这个方法,因为缺省的AppWidgetProvider实现过滤所有AppWidget广播并恰当的调用上述方法。
*注意:
在Android1.5中,有一个已知问题,onDeleted()方法在调用时不被调用。
*为了规避这个问题,你可以像Grouppost中描述的那样实现onReceive()来接收这个onDeleted()回调。
publicvoidonReceive(Contextcontext,Intentintent){
onReceive"
super.onReceive(context,intent);
清单文件
manifestxmlns:
package="
com.ljq.activity"
versionCode="
1"
versionName="
applicationandroid:
icon="
@drawable/icon"
label="
@string/app_name"
activityandroid:
name="
.MainActivity"
主程序"
intent-filter>
actionandroid:
android.intent.action.MAIN"
categoryandroid:
android.intent.category.LAUNCHER"
/intent-filter>
/activity>
--TestActivity类为一个广播接收器,因为TestActivity继承自AppWidgetProvider-->
receiverandroid:
.TestActivity"
添加桌面控件"
android.appwidget.action.APPWIDGET_UPDATE"
meta-dataandroid:
android.appwidget.provider"
resource="
@xml/my_appwidget"
/receiver>
/application>
uses-sdkandroid:
minSdkVersion="
7"
/manifest>