桌面组件Appwidget的应用实例以及导入第三方jar包的问题解决
桌面组件Appwidget的应用实例以及导入第三方jar包的问题解决
打开eclipse发现自己昨天做的天气预报有错,很诡异,在eclipse的工程前面有一个小错号,但是却没有报什么地方有错,于是,自己用傻类吧唧的重新再建一个工程,重新导入第三方的jar包sax2r2.jar的包,注意就是这个包的路径出现了错误,由于我把sax2r2.jar放在桌面上,用完感觉到没什么用后就直接删了,然后重启一下eclipse后就发现了工程前面有错好,当时那个纠结加郁闷,于是上网上搜索了一下,再加上学长的提示,终于把这个问题解决了,
解决步骤如下:
首先,以后 在导入jar包的时候最好把jar包放入到自己建的工程里,这样当再次使用的时候,自己导入的jar包就不会因为丢失而郁闷路径path的问题了,
其次,如果不小心把jar包给删了,解决的方法如下:在自己的工程右键选择properties---Java Build Path ----Libraries----sax2r2.jar(选中导入的jar包)会出现错号,或者显示jar包miss丢失,如果出现这种情况,直接选中,然后Remove,然后再重新导入一下jar包(注意这次不要把它在从电脑中误删喽!!!),
导入jar步骤如下:在自己的工程右键选择properties---Java Build Path ----Libraries----Add External JARS--选择电脑中的jar包---然后同一个界面下的Order and Export 在自己导入的jar包前勾选,然后点击OK就可以了
2,今天解决的第二个问题,在多个Xml文件进行布局调用多个Activity时候,由于导包错误,导致自己定义布局的mapview.XML找不到layout,既setContentView(R.layout.mapview);找不到在R.java文件中注册的id,解决方法是直接删除 import Android.R;从新导入自己包中的R.这样问题就可以解决了。
3.今天学习的内容是app widget 其中两个重要的东西,
AppWidgetProviderInfo对象 为App widget提供元数据(布局、更新频率等等)AppWidgetProvider定义App Widget的基本生命周期函数
PendingIntent 类似锦囊的意思
创建方法有:1、getActivity(Context context,int requestCode,Intent intent ,int flags) 2、getBroadcast(Context context,int requestCode,Intent intent ,int flags) 3、getService(Context context,int requestCode,Intent intent ,int flags)
RemoteViews 表示一系列的View对象 表示对象运行在另外一个进程当中
4.注意AppWidget和主程序不在同一个进程当中,不能用普通的方法进行操作,但可以用一下方法,比如:RemoteView是中的一些方法,
好了废话不多说了,看看今天要实现的桌面组件AppWidget的过程
1.首先先看布局 一个简单的文本,图片、和按钮
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical" >
- <TextView
- android:id="@+id/app"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="暑假第二十天下午好!!!"
- android:textColor="#FF6130"
- />
- <ImageView
- android:id="@+id/image"
- android:layout_width="40dp"
- android:layout_height="40dp"
- android:src="@drawable/a" />
- <Button
- android:id="@+id/button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="测试widget" />
- </LinearLayout>
- <?xml version="1.0" encoding="UTF-8"?>
- <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
- android:minHeight="80dp"
- android:minWidth="300dp"
- android:updatePeriodMillis="30000"
- android:initialLayout="@layout/appwidget">
- </appwidget-provider>
- package com.wang.provider;
- import com.wang.R;
- 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;
- public class Appwidgetprovider extends AppWidgetProvider {
- // 常量字符串用于命名Action
- private static final String UPDATE_ACTION = "wang.UPDATE_APP_WIDGET";
- //调用自身的方法
- public void onDeleted(Context context, int[] appWidgetIds) {
- }
- @Override
- public void onDisabled(Context context) {
- }
- @Override
- public void onEnabled(Context context) {
- }
- @Override
- public void onReceive(Context context, Intent intent) {
- // 获取当前的意图动作
- String action = intent.getAction();
- if (UPDATE_ACTION.equals(action)) {
- //描述了一个视图层次结构,可以显示在另一个进程
- //创建一个新的RemoteViews对象将显示视图包含在指定的布局文件。
- RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
- R.layout.appwidget);
- //设置图片资源
- remoteViews.setImageViewResource(R.id.image, R.drawable.b);
- //设置文本内容
- remoteViews.setTextViewText(R.id.app, "今天都学到了什么???");
- //获取AppWidgetManager实例用于提供的上下文对象
- AppWidgetManager appWidgetManager = AppWidgetManager
- .getInstance(context);
- /*****ComponentName为一个特定的应用程序组件的标识符(活动、服务,
- * 或ContentProvider BroadcastReceiver)可用。
- * 两条信息,封装在这里,都必须确定一个组件:这个包(一个字符串),
- * 它存在于,类(一个字符串)的名字里面的包
- ***/
- ComponentName componentName = new ComponentName(context,
- AppWidgetProvider.class);
- /***设置RemoteViews用于所有实例AppWidget为所提供AppWidget提供者。
- * 调用这个方法既在一个ACTION_APPWIDGET_UPDATE广播、内外的处理程序。
- * 这种方法只会工作,当调用从uid,拥有AppWidget提供者。更新appwidget**/
- appWidgetManager.updateAppWidget(componentName, remoteViews);
- } else {
- //实现接受上下文的的方法和意图
- super.onReceive(context, intent);
- }
- }
- @Override
- public void onUpdate(Context context, AppWidgetManager appWidgetManager,
- int[] appWidgetIds) {
- // for (int i = 0; i < appWidgetIds.length; i++) {
- //
- // System.out.println(appWidgetIds[i]);
- // //创建一个intent的对象
- // Intent intent =new Intent(context,Target.class);
- // //创建一个pendingitent对象
- // PendingIntent pendingIntent=PendingIntent.getActivity(context, 0,
- // intent, 0);
- // RemoteViews remoteViews=new
- // RemoteViews(context.getPackageName(),R.layout.appwidget);
- // //为按钮绑定事件处理器
- // //,第一个参数用来指定被绑定的处理器的的ID
- // //第二个参数是用来指定当事件发生时候,哪一个pendingintent会被执行
- // remoteViews.setOnClickPendingIntent(R.id.button, pendingIntent);
- // ///g更新Appwidget
- // appWidgetManager.updateAppWidget(appWidgetIds[i], remoteViews);
- // }
- Intent intent = new Intent();
- // 为intent对象设置Action
- intent.setAction(UPDATE_ACTION);
- // 使用getBroadcast方法得到一个对象,当该对象执行时候,将发送一个广播
- PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,
- intent, 0);
- //声明一个RemoteViews的对象
- RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
- R.layout.appwidget);
- //设置点击事件
- remoteViews.setOnClickPendingIntent(R.id.button, pendingIntent);
- // /g更新Appwidget
- appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);
- }
- }
- <?xml version="1.0" encoding="utf-8"?>
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.wang"
- android:versionCode="1"
- android:versionName="1.0" >
- <uses-sdk android:minSdkVersion="10" />
- <application
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name" >
- <activity
- android:name=".AppWidgetTestActivity"
- android:label="@string/app_name" >
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
- </intent-filter>
- </activity>
- <receiver android:name="Appwidgetprovider" >
- <intent-filter>
- <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
- </intent-filter>
- <intent-filter>
- <action android:name="wang.UPDATE_APP_WIDGET" />
- </intent-filter>
- <!-- 元数据 -->
- <meta-data
- android:name="android.appwidget.provider"
- android:resource="@xml/appwidgettest" />
- </receiver>
- </application>
- </manifest>
评论暂时关闭