好贷网好贷款

使用AppWidget进行广播更新

发布时间:2016-12-5 8:31:53 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"使用AppWidget进行广播更新",主要涉及到使用AppWidget进行广播更新方面的内容,对于使用AppWidget进行广播更新感兴趣的同学可以参考一下。

                    使用AppWidget进行广播   android.appwidget包中定义的类: 1、        AppWidgetProvider:定义了AppWidget的基本操作,需要通过子类进行设置; 2、        AppWidgetProviderInfo:AppWidget组件的元数据提供者,例如:组件的大小、更新的时间等; 3、        AppWidgetHostView:创建AppWidget的View显示,些为真正的View,与之对应的还有一个RemoteView; 4、        AppWidgetHost:监听AppWidget的服务以及创建AppWidgetHostView 5、        AppWidgetManager:用于更新相应的AppWidget。   将本程序安装后,按Home键回到手机桌面,长按桌面后出现上下文对话框,此时选择“窗口小部件”,接着找到我们安装的程序, 我这里的程序名称为“桌面显示组件”,这样在我们的手机桌面上就出现了程序的快捷方式,我们一按此快捷方式就可以进行更新了。     本列子说明了如何进行按钮的更新,但是一般不会对按钮进行更新,本列子只为说明更新的方法。     在res/drawable-hdpi下加入一张名为button和一张名为button2的图片以供使用。       定义一个继承AppWidgetProvider的类MyAppWidget,代码如下:   package com.li.appwidget;   import android.annotation.SuppressLint; import android.app.PendingIntent; import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.widget.RemoteViews;   @SuppressLint("ParserError") public class MyAppWidget extends AppWidgetProvider {     @Override   public void onReceive(Context context, Intent intent) {     if("com.li.action.MYAPPWIDGET_UPDATE".equals(intent.getAction())){        RemoteViews remote = new RemoteViews(context.getPackageName(),             R.layout.liyewen_appwidget);        remote.setImageViewResource(R.id.img, R.drawable.button2);        remote.setTextViewText(R.id.but, "按钮被更新了");  //更新按钮上的文字        AppWidgetManager appWidgetManager = AppWidgetManager             .getInstance(context);        ComponentName componentName = new ComponentName(             context,MyAppWidget.class);        appWidgetManager.updateAppWidget(componentName, remote);      }      else{        super.onReceive(context, intent);     }   }     @Override   public void onUpdate(Context context, AppWidgetManager appWidgetManager,        int[] appWidgetIds) {        Intent intent = new Intent();        intent.setAction("com.li.action.MYAPPWIDGET_UPDATE");        PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,             intent, PendingIntent.FLAG_UPDATE_CURRENT);        RemoteViews remote = new RemoteViews(context.getPackageName(),             R.layout.liyewen_appwidget);        remote.setOnClickPendingIntent(R.id.but, pendingIntent);        appWidgetManager.updateAppWidget(appWidgetIds, remote);      } }               在res下新建xml文件夹,并在xml下新建一个资源配置文件liyewen_appwidget.xml, 此文件用于读取AppWidgetProvider的配置信息,代码如下:   <appwidget-provider     xmlns:android="http://schemas.android.com/apk/res/android"     android:minHeight="80dp"     android:minWidth="300dp"     android:updatePeriodMillis="6000"     android:initialLayout="@layout/liyewen_appwidget">     </appwidget-provider>             在layout文件夹中新建布局文件liyewen_appwidget.xml 此布局文件用于以后桌面组件的显示,代码如下:   <RelativeLayout      xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="fill_parent"     android:layout_height="fill_parent"     android:gravity="center_horizontal">   <ImageView       android:id="@+id/img"       android:layout_width="160dp"       android:layout_height="40dp"       android:src="@drawable/button"/>   <Button       android:id="@+id/but"       android:layout_width="160dp"       android:layout_height="40dp"       android:background="#00000000"       android:text="按我更新按钮"       android:textColor="#ffffff"/> </RelativeLayout >               修改AndroidManifest.xml文件,将之前在res/xml文件夹中配置的文件定义在广播之中。 增加的部分为:   <receiver android:name=".MyAppWidget">             <intent-filter >                 <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>             </intent-filter>             <intent-filter >                 <action android:name="com.li.action.MYAPPWIDGET_UPDATE"/>             </intent-filter>             <meta-data                 android:name="android.appwidget.provider"                 android:resource="@xml/liyewen_appwidget"/> </receiver>         整个AndroidManifest.xml文件为(我用的SDK是最新的,所以AndroidManifest.xml文件会有些不同):   <manifest xmlns:android="http://schemas.android.com/apk/res/android"     package="com.li.appwidget"     android:versionCode="1"     android:versionName="1.0" >       <uses-sdk         android:minSdkVersion="8"         android:targetSdkVersion="15" />       <application         android:icon="@drawable/ic_launcher"         android:label="@string/app_name"         android:theme="@style/AppTheme" >         <activity             android:name=".MyAppWidgetDemo"             android:label="@string/title_activity_my_app_widget_demo" >             <intent-filter>                 <action android:name="android.intent.action.MAIN" />                   <category android:name="android.intent.category.LAUNCHER" />             </intent-filter>         </activity>         <receiver android:name=".MyAppWidget">             <intent-filter >                 <action android:name="android.appwidget.action.APPWIDGET_UPDATE"/>             </intent-filter>             <intent-filter >                 <action android:name="com.li.action.MYAPPWIDGET_UPDATE"/>             </intent-filter>             <meta-data                 android:name="android.appwidget.provider"                 android:resource="@xml/liyewen_appwidget"/>         </receiver>     </application> </manifest>           主Activity(MyAppWidgetDemo.java)的代码如下:     package com.li.appwidget;   import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.MenuItem; import android.support.v4.app.NavUtils;   public class MyAppWidgetDemo extends Activity {       @Override     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);     }   }       主布局文件main.xml不用做任何修改        

上一篇:Android之实现iPhone百度云item可扩展效果
下一篇:

相关文章

相关评论