青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 224  文章 - 41  trackbacks - 0
<2010年8月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

享受編程

常用鏈接

留言簿(11)

隨筆分類(159)

隨筆檔案(224)

文章分類(2)

文章檔案(4)

經(jīng)典c++博客

搜索

  •  

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

參考網(wǎng)站:http://www.eoeandroid.com/viewthread.php?tid=19709&highlight=widget
        Android開(kāi)發(fā)應(yīng)用除了程序應(yīng)用,還有是Widget應(yīng)用。好多人會(huì)開(kāi)發(fā)程序應(yīng)用而不會(huì)開(kāi)發(fā)Widget應(yīng)用。
   

先簡(jiǎn)單說(shuō)說(shuō)Widget的原理。Widget是在桌面上的一塊顯示信息的東西,也通過(guò)單擊Widget跳轉(zhuǎn)到一個(gè)程序里面。而系統(tǒng)自帶的程序,典型的Widget是music,這個(gè)Android內(nèi)置的音樂(lè)播放小程序。這個(gè)是典型的Widget+app應(yīng)用。就是一個(gè)程序既可以通過(guò)Widget啟動(dòng),也可以通過(guò)App啟動(dòng)。Widget就是一個(gè)AppWidgetProvider+一個(gè)UI界面顯示(預(yù)先綁定了好多Intent),界面上的信息可以通過(guò)程序控制而改變,單擊Widget,上的控件只能激發(fā)發(fā)送一個(gè)Intent,或發(fā)出一個(gè)Service的啟動(dòng)通知。而AppWidgetProvider可以攔截這個(gè)Intent,而進(jìn)行相應(yīng)的處理(比如顯示新的信息)。

    我們先來(lái)看看AndroidManifest.xml中的代碼:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package
="com.android"
      android:versionCode
="1"
      android:versionName
="1.0">
    
<application android:icon="@drawable/icon" android:label="@string/app_name">
        
<receiver android:name=".BatteryMonitor"
                  android:label
="@string/app_name">
            
<intent-filter>
                
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            
</intent-filter>
            
<meta-data
                
android:name="android.appwidget.provider"
                android:resource
="@xml/widget_provider" />
        
</receiver>

    
</application>
    
<uses-sdk android:minSdkVersion="3" />
</manifest> 
這里很清楚的可以看出AppWidgetProvider就是一個(gè)receiver的東西。
在receiver中
            <meta-data
                
android:name="android.appwidget.provider"
                android:resource
="@xml/widget_provider" />
代表了一個(gè)widget_provider代碼如下:
<?xml version="1.0" encoding="utf-8"?>
<appwidget-provider
  
xmlns:android="http://schemas.android.com/apk/res/android"
  android:minWidth
="100dip"
  android:minHeight
="100dip"
  android:initialLayout
="@layout/main" >
</appwidget-provider>

這個(gè)是Widget的顯示設(shè)置,是對(duì)Widget屬性的一個(gè)配置文件這個(gè)android:minHeight是Widget的高,這個(gè)android:minWidth
是Widget的寬。這個(gè)android:updatePeriodMillis屬性是設(shè)置Widget頁(yè)面的
更新頁(yè)面的時(shí)間的頻率。而這個(gè)android:initialLayout屬性是表示的是初始化頁(yè)面的布局,Android里畫(huà)UI的地方都是通過(guò)xml文件,也可以通過(guò)代碼程序來(lái)畫(huà),不過(guò)這樣畫(huà)的太麻煩了。

建一個(gè)類BatteryMonitor繼承于AppWidgetProvider,而AppWidgetProvider繼承與android.content.BroadcastReceiver,所以TestAppWidget就是一個(gè)攔截處理Intent的BroadcastReceiver,這些Intent只能在Androidmainfest里設(shè)置來(lái)攔截處理。
在onUpdate中設(shè)置窗口界面:

    public void defaultWidget(Context context) {
        
        RemoteViews updateViews 
= new RemoteViews(context.getPackageName(), R.layout.main);
        
        
//updateViews.setTextViewText(R.id.battery_level, BatteryLevel+" %");
        
        updateViews.setImageViewResource(R.id.battery_img, R.drawable.batteryimg);
        
        
// Push update for this widget to the home screen
        ComponentName batteryWidget = new ComponentName(context, BatteryMonitor.class);
        AppWidgetManager manager 
= AppWidgetManager.getInstance(context);
        manager.updateAppWidget(batteryWidget, updateViews);        
    }
啟動(dòng)一個(gè)服務(wù)來(lái)更新電源電量:
context.startService(new Intent(context, BatteryMonitorReceiver.class));
import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.util.Log;
import android.widget.RemoteViews;




public class BatteryMonitorReceiver extends Service
{
    
private int BatteryLevel = 0;

    
private BroadcastReceiver batteryReceiver = new BroadcastReceiver()
    
{
        @Override
        
public void onReceive(Context context, Intent intent)
        
{
            String action 
= intent.getAction();
            
if (action.equals(Intent.ACTION_BATTERY_CHANGED))
            
{
                Log.d(
"BatteryLevel","BatteryCHANGED");
                BatteryLevel 
= intent.getIntExtra("level"0);
                UpdateAppWidget(context);
            }

        }

    }
;
    
    
public void UpdateAppWidget(Context context){
         RemoteViews updateViews 
= new RemoteViews(context.getPackageName(), R.layout.main);
         updateViews.setTextViewText(R.id.battery_level, BatteryLevel
+" %");
        
        
// Push update for this widget to the home screen
        ComponentName batteryWidget = new ComponentName(context, BatteryMonitor.class);
        AppWidgetManager manager 
= AppWidgetManager.getInstance(context);
        manager.updateAppWidget(batteryWidget, updateViews);
    }

    
    
/* (non-Javadoc)
     * @see android.app.Service#onCreate()
     
*/

    @Override
    
public void onCreate() {
        
// TODO Auto-generated method stub
        super.onCreate();
        
        IntentFilter itFilter 
= new IntentFilter();
        itFilter.addAction(Intent.ACTION_BATTERY_CHANGED);
        registerReceiver(batteryReceiver, itFilter);
    }


    @Override
    
public void onStart(Intent intent, int startId)
    
{
        
    }


    
    
/* (non-Javadoc)
     * @see android.app.Service#onDestroy()
     
*/

    @Override
    
public void onDestroy() {
        
// TODO Auto-generated method stub
        super.onDestroy();
        unregisterReceiver(batteryReceiver);
    }


    @Override
    
public IBinder onBind(Intent intent)
    
{
        
// TODO Auto-generated method stub
        return null;
    }


}
在xml中注冊(cè)服務(wù)
        <service android:name=".BatteryMonitorReceiver">
          
<intent-filter>
              
<action android:name="com.adroid.pp" />
              
<category android:name="android.intent.category.default" />
          
</intent-filter>
        
</service>
代碼下載
posted on 2010-06-13 13:13 漂漂 閱讀(3180) 評(píng)論(1)  編輯 收藏 引用 所屬分類: android 開(kāi)發(fā)
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产精品国产亚洲精品看不卡15| 亚洲成色最大综合在线| 欧美午夜免费| 欧美网站大全在线观看| 欧美黑人多人双交| 欧美精品亚洲精品| 欧美三级第一页| 国产精品久久久久久久久搜平片 | 亚洲午夜激情网站| 亚洲国产精品日韩| av成人动漫| 免费一级欧美片在线播放| 欧美精品 日韩| 国产精品影视天天线| 亚洲国产精品va在看黑人| 亚洲剧情一区二区| 久久精品视频在线观看| 欧美国产一区二区在线观看 | 日韩视频永久免费| 日韩视频免费| 久久久久久亚洲综合影院红桃| 久久夜色精品一区| 中日韩午夜理伦电影免费| 免费观看成人网| 国产在线播放一区二区三区| 亚洲免费电影在线观看| 久久人体大胆视频| 久久精品99无色码中文字幕| 国产精品久久激情| 妖精成人www高清在线观看| 欧美wwwwww| 午夜精品视频在线观看| 欧美色道久久88综合亚洲精品| 亚洲精品色婷婷福利天堂| 久热精品视频在线观看| 免费观看不卡av| 亚洲三级免费| 亚洲激情啪啪| 国产精品国产成人国产三级| 一本综合久久| 日韩视频永久免费| 欧美日韩亚洲综合一区| 亚洲免费在线视频一区 二区| 在线中文字幕不卡| 国产在线视频欧美| 亚洲福利久久| 国产精品天天看| 蜜臀va亚洲va欧美va天堂| 欧美xart系列高清| 在线视频精品一区| 欧美亚洲三区| aa级大片欧美| 亚洲伊人第一页| 亚洲国产导航| 亚洲图片欧美一区| 久久国产精品一区二区三区| 亚洲国产婷婷| 欧美一区三区二区在线观看| 日韩视频在线你懂得| 亚洲女人小视频在线观看| 在线欧美日韩| 午夜精品久久久久久久99黑人| 亚洲精品在线二区| 久久精品亚洲精品国产欧美kt∨| 亚洲午夜免费福利视频| 欧美大片在线看免费观看| 久久国产加勒比精品无码| 欧美日韩免费观看中文| 欧美二区在线| 亚洲国产精品成人一区二区| 欧美一级久久| 久久人人爽人人| 国产一区二区精品久久| 一区二区三区日韩精品视频| 亚洲免费激情| 欧美成人精品在线播放| 欧美激情第三页| 亚洲片区在线| 欧美黄色一区| 亚洲美女色禁图| 欧美在线免费观看| 国产麻豆日韩欧美久久| 亚洲欧美日韩国产综合在线| 久久一区二区三区四区五区| 亚洲国产精品悠悠久久琪琪| 久久久午夜电影| 亚洲激情国产精品| 欧美一级成年大片在线观看| 国产精品久久久久一区| 欧美在线视频日韩| 久久一二三四| 夜色激情一区二区| 亚洲视频一区| 亚洲日韩中文字幕在线播放| 欧美日韩 国产精品| 亚洲一区二区精品视频| 免费在线亚洲| 久久国产精彩视频| 欧美a级大片| 久久精品国产一区二区三区| 亚洲精品网站在线播放gif| 老司机午夜精品| 欧美在线播放视频| 一区二区精品| 黑人巨大精品欧美一区二区| 国产精品激情av在线播放| 欧美女同视频| 欧美日韩天堂| 国产精品白丝黑袜喷水久久久 | 久久亚洲国产精品一区二区 | 1024亚洲| 一区在线播放| 亚洲高清视频一区二区| 精品粉嫩aⅴ一区二区三区四区| 国产精品羞羞答答| 狠狠色丁香婷婷综合| 一区在线视频| 亚洲二区视频在线| 亚洲美女中文字幕| 欧美二区视频| 欧美日韩亚洲一区二| 欧美另类综合| 欧美亚州韩日在线看免费版国语版| 久久天堂精品| 欧美成人免费网站| 欧美国产日韩一区| 欧美午夜三级| 伊人成人在线视频| 亚洲婷婷免费| 在线中文字幕日韩| 欧美日韩视频专区在线播放| 国产精品久久久久久久久久三级| 国产精品久久| 1000部精品久久久久久久久 | 欧美暴力喷水在线| 欧美日韩视频第一区| 国产一区二区三区电影在线观看| 国产综合视频| 亚洲欧美www| 美玉足脚交一区二区三区图片| 欧美成人69| 午夜精品剧场| 国内精品久久久久影院优| 亚洲国产三级网| 久久久99国产精品免费| 亚洲午夜日本在线观看| 欧美午夜精品久久久久久超碰| 亚洲电影第三页| 免费亚洲一区| 另类av导航| 日韩天堂在线视频| 亚洲精品美女91| 欧美三级在线视频| 午夜在线精品偷拍| 久久www免费人成看片高清| 狠狠色噜噜狠狠色综合久| 久久伊人一区二区| 欧美大色视频| 亚洲视频综合在线| 午夜视频一区在线观看| 精品1区2区3区4区| 亚洲黄色毛片| 国产亚洲午夜高清国产拍精品| 亚欧美中日韩视频| 欧美成年人网| 欧美专区在线观看一区| 另类图片国产| 亚洲一区二区三区在线观看视频 | 欧美少妇一区二区| 国产精品女同互慰在线看| 亚洲欧美一区二区视频| 欧美一区二区三区另类| 99成人在线| 久久综合色婷婷| 亚洲伊人网站| 欧美日韩伦理在线| 久久艳片www.17c.com| 国产精品日韩一区| 亚洲大片一区二区三区| 国产中文一区| 亚洲欧美变态国产另类| 99国产精品久久久| 久久尤物电影视频在线观看| 香蕉国产精品偷在线观看不卡| 欧美激情aaaa| 亚洲国产mv| 亚洲欧洲综合另类| 欧美激情亚洲自拍| 亚洲激情在线观看| 国产精品网曝门| 亚洲一区在线直播| 久久se精品一区精品二区| 国产欧美日韩视频一区二区三区| 亚洲一区二区视频在线观看| 欧美一区二区三区视频免费| 欧美午夜一区二区| 久久riav二区三区| 亚洲电影成人| 亚洲无人区一区| 国产精品综合不卡av|