• <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>
            隨筆 - 224  文章 - 41  trackbacks - 0
            <2008年11月>
            2627282930311
            2345678
            9101112131415
            16171819202122
            23242526272829
            30123456

            享受編程

            常用鏈接

            留言簿(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里畫UI的地方都是通過(guò)xml文件,也可以通過(guò)代碼程序來(lái)畫,不過(guò)這樣畫的太麻煩了。

            建一個(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 漂漂 閱讀(3131) 評(píng)論(1)  編輯 收藏 引用 所屬分類: android 開(kāi)發(fā)
            蜜桃麻豆www久久国产精品| 久久久午夜精品| 国产精品美女久久久免费| 精品久久久久一区二区三区| 久久久久综合中文字幕| 亚洲午夜无码久久久久| 2020最新久久久视精品爱 | 久久精品aⅴ无码中文字字幕不卡| 精品伊人久久久| 国产成人无码精品久久久久免费 | 伊人热热久久原色播放www| 国内精品久久久久影院优| 国内精品久久久久久久久电影网 | 四虎国产精品成人免费久久| 久久综合九色综合网站| 性做久久久久久久久久久| 91精品国产乱码久久久久久| 一本大道久久东京热无码AV| 国产成人久久精品麻豆一区| 国产精品女同久久久久电影院 | 亚洲精品无码久久久久| 久久男人AV资源网站| 中文字幕亚洲综合久久2| 久久亚洲精品无码AV红樱桃| 伊色综合久久之综合久久| 99久久国产综合精品网成人影院| 性欧美丰满熟妇XXXX性久久久 | 激情伊人五月天久久综合| 亚洲一级Av无码毛片久久精品| 99久久www免费人成精品| 91精品国产综合久久婷婷| 热re99久久6国产精品免费| 国产成人无码精品久久久性色 | 亚洲AV成人无码久久精品老人| 亚洲精品综合久久| 午夜精品久久久久9999高清| 久久亚洲高清综合| 2020久久精品亚洲热综合一本| 天天影视色香欲综合久久| 亚洲国产一成久久精品国产成人综合| 中文精品久久久久国产网址|