android 考研appwidget的实现

 实现一个简单的appwidget

android 考研appwidget的实现_第1张图片

主要的功能有 显示时间 日期,显示考研倒计时间,显示天气,显示目标,以及一些励志话语等。

1.首先定义appwidget 的描述xml文件

在res文件下新建xml文件夹 新建kaoyan.xml文件

 

android 考研appwidget的实现_第2张图片

 

  
  
  
  
  1. <?xml version="1.0" encoding="utf-8"?> 
  2.  
  3. <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android" 
  4.  
  5.     android:minWidth="286dp" 
  6.  
  7.     android:minHeight="142dp" 
  8.  
  9.     android:initialLayout="@layout/kaoyan_widget" 
  10.  
  11.     android:updatePeriodMillis="180000" 
  12.  
  13.     android:configure="com.kaoyan.KaoyanActivity" 
  14.  
  15.      > 
  16. </appwidget-provider> 

  1. android:minWidth="286dp"  //宽度
  2.  
  3.     android:minHeight="142dp"  //高度
  4.  
  5.     android:initialLayout="@layout/kaoyan_widget"  //布局文件
  6.  
  7.     android:updatePeriodMillis="180000" //刷新时间
  8.  android:configure="com.kaoyan.KaoyanActivity"  // 配置文件

2.建立相应的layout文件

 

  
  
  
  
  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
  3.     android:layout_width="fill_parent" 
  4.     android:layout_height="fill_parent" 
  5.     android:orientation="horizontal" 
  6.     android:background="@drawable/beijing" > 
  7.      
  8.      
  9.     <LinearLayout  
  10.         android:layout_width="200dp" 
  11.     android:layout_height="fill_parent" 
  12.         android:paddingLeft="35dp" 
  13.     android:paddingTop="35dp" 
  14.     android:orientation="vertical" 
  15.    
  16.         > 
  17.     <TextView 
  18.     android:id="@+id/daojishi" 
  19.     android:layout_height="wrap_content" 
  20.     android:textColor="#ffffff" 
  21.    android:paddingLeft="100dp" 
  22.     android:layout_width="wrap_content" 
  23.     android:gravity="center" 
  24.     android:textSize="15dp" 
  25.     android:text="300天" 
  26.      /> 
  27.  <TextView 
  28.     android:id="@+id/time" 
  29.     android:layout_height="wrap_content" 
  30.     android:textColor="#ffffff" 
  31.     android:layout_marginTop="5dp" 
  32.     android:layout_width="150dp" 
  33.     android:gravity="center" 
  34.     android:textSize="10dp" 
  35.     android:text="" 
  36.      /> 
  37.  <TextView 
  38.     android:id="@+id/mymubiao" 
  39.     android:layout_width="150dp" 
  40.     android:layout_height="wrap_content" 
  41.     android:paddingTop="5dp" 
  42.     android:textColor="#ffffff" 
  43.     android:gravity="center" 
  44.     android:text="" 
  45.      /> 
  46.   <TextView 
  47.     android:id="@+id/yanyu" 
  48.     android:layout_width="wrap_content" 
  49.     android:layout_height="wrap_content" 
  50.      android:paddingTop="5dp" 
  51.     android:textColor="#ffffff" 
  52.     android:text="" 
  53.      /> 
  54.      <TextView 
  55.     android:id="@+id/tishi" 
  56.     android:layout_width="wrap_content" 
  57.     android:layout_height="wrap_content" 
  58.      android:paddingTop="5dp" 
  59.     android:textColor="#ffffff" 
  60.     android:text="" 
  61.      /> 
  62. </LinearLayout> 
  63.  
  64.      
  65.  <LinearLayout  
  66.         android:layout_width="fill_parent" 
  67.     android:layout_height="fill_parent" 
  68.     android:paddingTop="35dp" 
  69.     android:orientation="vertical" 
  70.         > 
  71.      <ImageView  
  72.          android:id="@+id/tupian" 
  73.          android:layout_width="45dp" 
  74.          android:layout_height="45dp" 
  75.          android:layout_marginLeft="20dp" 
  76.          android:src="@drawable/qingtian" 
  77.           /> 
  78.      <TextView  
  79.          android:id="@+id/tianqi" 
  80.          android:layout_width="wrap_content" 
  81.          android:layout_height="wrap_content" 
  82.            android:textColor="#ffffff" 
  83.            android:textSize="8dp" 
  84.          android:text="" /> 
  85.      <TextView  
  86.          android:id="@+id/mingtian" 
  87.          android:layout_width="wrap_content" 
  88.          android:layout_height="wrap_content" 
  89.            android:textColor="#ffffff" 
  90.            android:textSize="8dp" 
  91.          android:text="" /> 
  92.      </LinearLayout> 
  93.       
  94. </LinearLayout> 

4,建立相应的AppWidgetProvider类

 

  
  
  
  
  1. package com.kaoyan; 
  2.  
  3. import java.io.IOException; 
  4. import java.io.InputStream; 
  5. import java.net.MalformedURLException; 
  6. import java.net.URL; 
  7. import java.net.URLConnection; 
  8. import java.text.SimpleDateFormat; 
  9. import java.util.Date; 
  10.  
  11. import org.xmlpull.v1.XmlPullParserException; 
  12.  
  13. import android.app.Service; 
  14. import android.appwidget.AppWidgetManager; 
  15. import android.appwidget.AppWidgetProvider; 
  16. import android.content.ComponentName; 
  17. import android.content.Context; 
  18. import android.content.Intent; 
  19. import android.os.Handler; 
  20. import android.os.IBinder; 
  21. import android.util.Log; 
  22. import android.widget.RemoteViews; 
  23.  
  24. public class kaoyanWidget extends AppWidgetProvider { 
  25.  
  26.     @Override 
  27.     public void onDisabled(Context context) { 
  28.         // TODO Auto-generated method stub 
  29.         super.onDisabled(context); 
  30.         Log.i("kaoyanWidget", "onDisabled"); 
  31.     } 
  32.     @Override 
  33.     public void onEnabled(Context context) { 
  34.         // TODO Auto-generated method stub 
  35.         super.onEnabled(context); 
  36.         Log.i("kaoyanWidget", "onEnabled"); 
  37.     } 
  38.     @Override 
  39.     public void onReceive(Context context, Intent intent) { 
  40.         // TODO Auto-generated method stub 
  41.         super.onReceive(context, intent); 
  42.         Log.i("onReceive", intent.getAction()); 
  43.     } 
  44.     @Override 
  45.     public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
  46.             int[] appWidgetIds) { 
  47.         // TODO Auto-generated method stub 
  48.          
  49.         Log.i("update", "开始更新"); 
  50.         Log.i("update",appWidgetManager.getInstalledProviders().size()+" "); 
  51.         Intent intent = new Intent(context, UpdateService.class);  
  52.         context.startService(intent);  
  53.         URL aURL; 
  54.         try { 
  55.             aURL = new URL("http://www.google.com/ig/api?hl=zh_cn&weather=beijing"); 
  56.             URLConnection con=  aURL.openConnection(); 
  57.             InputStream  iscon.getInputStream(); 
  58.             xmlParser mXml=new xmlParser(); 
  59.             weather mweather=mXml.parser(is); 
  60.             RemoteViews views=new RemoteViews("com.kaoyan",R.layout.kaoyan_widget); 
  61.             views.setTextViewText(R.id.tianqi, "天气:"+mweather.getCondition()+"   气温:"+mweather.getTemp_c()); 
  62.             views.setTextViewText(R.id.mingtian, "明天:"+mweather.getmCondition()+"   "+mweather.getLow()+"~"+mweather.getHigh()); 
  63.             Log.i("update", "天气:"+mweather.getCondition()+"   气温:"+mweather.getTemp_c()); 
  64.             Log.i("update", "明天:"+mweather.getmCondition()+"   "+mweather.getLow()+"~"+mweather.getHigh()); 
  65.             appWidgetManager.updateAppWidget(appWidgetIds, views);  
  66.             for(int i=0;i<appWidgetIds.length;i++) 
  67.             Log.i("appWidgetIds", appWidgetIds[i]+" "); 
  68.         } catch (MalformedURLException e) { 
  69.             // TODO Auto-generated catch block 
  70.             e.printStackTrace(); 
  71.         } catch (XmlPullParserException e) { 
  72.             // TODO Auto-generated catch block 
  73.             e.printStackTrace(); 
  74.         } catch (IOException e) { 
  75.             // TODO Auto-generated catch block 
  76.             e.printStackTrace(); 
  77.         } 
  78.          
  79.         super.onUpdate(context, appWidgetManager, appWidgetIds); 
  80.         Log.i("update", "更新结束"); 
  81.     } 
  82.     @Override 
  83.     public void onDeleted(Context context, int[] appWidgetIds) { 
  84.         // TODO Auto-generated method stub 
  85.         Intent intent = new Intent(context, UpdateService.class);  
  86.         context.stopService(intent); 
  87.          
  88.         super.onDeleted(context, appWidgetIds); 
  89.         Log.i("delete", appWidgetIds.toString()); 
  90.     } 
  91.  
  92.      public static class UpdateService extends Service { 
  93.          private Handler objHandler=new Handler(); 
  94.          private Runnable mTasks=new Runnable(){ 
  95.  
  96.             public void run() { 
  97.                 // TODO Auto-generated method stub 
  98.                 RemoteViews views=new RemoteViews(UpdateService.this.getPackageName(),R.layout.kaoyan_widget); 
  99.                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日     hh:mm:ss");  
  100.                 views.setTextViewText(R.id.time, "" + sdf.format(new Date())); 
  101.                 ComponentName thisWidget = new ComponentName(UpdateService.this, kaoyanWidget.class);  
  102.                 AppWidgetManager manager = AppWidgetManager.getInstance(UpdateService.this);  
  103.                 manager.updateAppWidget(thisWidget, views);  
  104.                 objHandler.postDelayed(mTasks, 1000); 
  105.             }}; 
  106.           
  107.         @Override 
  108.         public IBinder onBind(Intent arg0) { 
  109.             // TODO Auto-generated method stub 
  110.             return null; 
  111.         } 
  112.  
  113.         @Override 
  114.         public void onStart(Intent intent, int startId) { 
  115.             // TODO Auto-generated method stub 
  116.             Log.i("Service", "onStart"); 
  117.             super.onStart(intent, startId); 
  118.             objHandler.postDelayed(mTasks, 1000); 
  119.              
  120.         } 
  121.  
  122.         @Override 
  123.         public void onDestroy() { 
  124.             // TODO Auto-generated method stub 
  125.             super.onDestroy(); 
  126.             Log.i("Service", "onDestroy"); 
  127.         } 
  128.           
  129.      } 
  130.  
  131.  
  132.      
  133.      
  134.  

 

你可能感兴趣的:(android)