1. 程式人生 > >AppWidgetProvider桌面控制元件的使用簡介

AppWidgetProvider桌面控制元件的使用簡介

一 介紹

AppWidgetProvider是android中提供的用於實現桌面小工具的類,其本質是一個廣播,即BroadcastReceiver。下面是類的繼承關係。


所以,在實際的使用中,把AppWidgetProvider當成一個BroadcastReceiver就可以了,這樣許多功能就很好理解了。

二 開發一個桌面小工具的步驟

1 定義小工具介面:在res/layout/下新建一個xml檔案,名為widget.xml,名稱和內容可以自定義,看你的小工具要做成什麼樣子。

[html]  view plain
 copy   在CODE上檢視程式碼片 派生到我的程式碼片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent" >  
  5.   
  6.     <ImageView  
  7.         android:id="@+id/imageView1"  
  8.         android:layout_width
    ="wrap_content"  
  9.         android:layout_height="wrap_content"  
  10.         android:layout_alignParentLeft="true"  
  11.         android:layout_alignParentTop="true"  
  12.         android:src="@drawable/clear_cover" />  
  13.   
  14. </RelativeLayout>  


2 定義小工具配置資訊:在res/xml/下新建appwidget_provider_info.xml,名稱隨意選,新增如下內容

[html]  view plain  copy   在CODE上檢視程式碼片 派生到我的程式碼片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:initialLayout="@layout/widget"  
  4.     android:minHeight="84dp"  
  5.     android:minWidth="84dp"  
  6.     android:updatePeriodMillis="86400000" >  
  7.   
  8. </appwidget-provider>  
上面幾個引數意義很明確,initialLayout就是指小工具所使用的初始化佈局,minHeight和minWidth定義小工具的最小尺寸,updatePeriodMillis定義了小工具的自動更新週期,毫秒為單位,每隔一個週期,小工具的自動更新就會觸發。

3 定義小工具類,繼承AppWidgetProvider:

[java]  view plain  copy   在CODE上檢視程式碼片 派生到我的程式碼片
  1. public class MyAppWidgetProvider extends AppWidgetProvider {  
  2.   
  3.     public static final String TAG = "MyAppWidgetProvider";  
  4.     public static final String CLICK_ACTION = "com.example.action.CLICK";  
  5.     private static RemoteViews mRemoteViews;  
  6.   
  7.     /** 
  8.      * 每刪除一次視窗小部件就呼叫一次 
  9.      */  
  10.     @Override  
  11.     public void onDeleted(Context context, int[] appWidgetIds) {  
  12.         super.onDeleted(context, appWidgetIds);  
  13.         Log.i(TAG, "onDeleted");  
  14.     }  
  15.   
  16.     /** 
  17.      * 當最後一個該視窗小部件刪除時呼叫該方法,注意是最後一個 
  18.      */  
  19.     @Override  
  20.     public void onDisabled(Context context) {  
  21.         super.onDisabled(context);  
  22.         Log.i(TAG, "onDisabled");  
  23.     }  
  24.   
  25.     /** 
  26.      * 當該視窗小部件第一次新增到桌面時呼叫該方法,可新增多次但只第一次呼叫 
  27.      */  
  28.     @Override  
  29.     public void onEnabled(Context context) {  
  30.         super.onEnabled(context);  
  31.         Log.i(TAG, "onEnabled");  
  32.     }  
  33.   
  34.     /** 
  35.      * 接收視窗小部件點選時傳送的廣播 
  36.      */  
  37.     @Override  
  38.     public void onReceive(final Context context, Intent intent) {  
  39.         super.onReceive(context, intent);  
  40.         Log.i(TAG, "onReceive : action = " + intent.getAction());  
  41.   
  42.         //這裡判斷是自己的action,做自己的事情,比如小工具被點選了要幹啥,這裡是做來一個動畫效果  
  43.         if (intent.getAction().equals(CLICK_ACTION)) {  
  44.             Toast.makeText(context, "clicked it", Toast.LENGTH_SHORT).show();  
  45.               
  46.             new Thread(new Runnable() {  
  47.                 @Override  
  48.                 public void run() {  
  49.                     Bitmap srcbBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.clear_fan);  
  50.                     for (int i = 0; i < 20; i++) {  
  51.                         float degree = (i * 90)%360;  
  52.                         mRemoteViews.setImageViewBitmap(R.id.imageView1, rotateBitmap(context, srcbBitmap, degree));  
  53.                         Intent intentClick = new Intent();  
  54.                         intentClick.setAction(CLICK_ACTION);  
  55.                         PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intentClick, 0);  
  56.                         mRemoteViews.setOnClickPendingIntent(R.id.imageView1, pendingIntent);  
  57.                         AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);  
  58.                         appWidgetManager.updateAppWidget(  
  59.                                 new ComponentName(context, MyAppWidgetProvider.class), mRemoteViews);  
  60.                         try {  
  61.                             Thread.sleep(100);  
  62.                         } catch (InterruptedException e) {  
  63.                             e.printStackTrace();  
  64.                         }  
  65.                     }  
  66.                       
  67.                 }  
  68.             }).start();  
  69.               
  70.         }  
  71.           
  72.     }  
  73.   
  74.     /** 
  75. 相關推薦

    AppWidgetProvider桌面控制元件的使用簡介

    一 介紹 AppWidgetProvider是android中提供的用於實現桌面小工具的類,其本質是一個廣播,即BroadcastReceiver。下面是類的繼承關係。 所以,在實際的使用中,把AppWidgetProvider當成一個BroadcastReceiver就可以

    俠仙客Silverlight/WPF工程管理甘特圖控制元件簡介(XiaXianKe Silverlight/WPF project management gantt chart control)

    俠仙客甘特圖簡介     該GanttControl(甘特圖空間)是一種可視的和功能豐富的Silverlight/ WPF控制元件,是視覺化工程任務管理的理想控制元件,內建有具有假期的日程安排、強制執行和視覺化的依賴約束等。包括左側的多列樹列表與右側的具有可縮

    MFC串列埠通訊(一)——MSComm控制元件簡介

    Visual C++為我們提供了一種好用的ActiveX控制元件Microsoft Communications Control(即MSComm)來支援應用程式對串列埠的訪問,在應用程式中插入MSComm控制元件後就可以較為方便地實現對通過計算機串列埠收發資料。&nbs

    python Tkinter 15種控制元件簡介

    2.Canvas 畫布。提供繪圖功能(直線、橢圓、多邊形、矩形) ;可以包含圖形或點陣圖3.Checkbutton 選擇按鈕。一組方框,可以選擇其中的任意個(類似 HTML 中的 checkbox)4.Entry 文字框。單行文字域,用來收集鍵盤輸入(類似 HTML 中的 text)5.Frame 框架。包含

    ubuntu使用conky新增桌面控制元件

    週末沒事好好玩一下ubuntu,首先就想用windows的桌面。 桌面快捷方式就是把/usr/share/applications/下面的應用啟動檔案拷貝到桌面; 下面主要說說如何新增桌面控制元件。我

    Android控制元件提示框與執行緒簡介

    訊息提示框 1. Toast(吐絲框)   1.1 Toast是Android中的一種簡易的訊息提示框   1.2 使用這個類的最簡單的方法是呼叫靜態方法構造您所需要的一切,並返回一個新的Toast物件。       Toast toast=To

    控制元件的父視窗設為桌面後如何讓它能正常響應鍵鼠訊息

    ListView中的item怎麼設定裝箱拆箱操作繫結實體類點選DateTimePicker三角鈕的事件ListView中的item怎麼設定裝箱拆箱操作繫結實體類點選DateTimePicker三角鈕的事件 專案檔案中含有兩個config檔案app.config與app1.co

    C# 實現真正的透明控制元件(Windows桌面程式)

    由於上位機程式的需要,需要大量的異性控制元件,開始不以為然,心想隨著GDI到GDI+的升級,微軟應該會給NET打造了一套高效絢麗的繪圖方案,使用後才知道完全不是我以為的那麼回事.於是開始各種尋找資源,發現網上方法無非使用Web.Transparent作為背景,要麼就完全使用

    AppWidget(桌面控制元件詳解)

    介紹 Android widget 也稱為桌面外掛,其是android系統應用開發層面的一部分,但是又有特殊用途,而且會成為整個android系統的亮點。Android中的AppWidget與google widget和中移動的widget並

    框架,庫,外掛,元件控制元件簡介

    1.框架。FrameWork。無法對框架進行修改 2.庫。Library。以框架為基礎開發而成,可對庫的內容進行修改。 3.外掛。Plugin。一段寫好的程式碼,方便開發者使用。比如前段的輪播圖外掛,比較花哨的選單外掛,以及甘特圖外掛,Highcharts 圖表外掛,Ex

    Qt 鍵盤上下左右改變控制元件焦點 (就像桌面上下左右選擇一樣)

    只要視窗上的控制元件按照一個有序的二維排列設定objectname就可以。 比如 11 12 13           21 22 23 之類的設定名字,然後一個變數相應上下左右按鍵操作,利用fin

    androidの桌面控制元件(1)—電池狀態顯示

    桌面小控制元件的實現是基於Broadcast的形式實現的,因此,每一個桌面小控制元件都對應於一個BroadcastReceiver類。Android系統提供了一個AppWidgetProvider類(它就是BroadcastReceiver的子類),這個類很關鍵,你在寫桌面小控制元件時只需繼承這個類就行。

    Java開發桌面程式學習(二)————fxml佈局與控制元件學習

    JavaFx專案 新建完專案,我們的專案有三個檔案 Main.java 程式入口類,載入介面並顯示 Controller.java 事件處理,與fxml繫結 Sample.fxml 介面 sample.fxml需要通過標籤fx:controller定義對應的controller <!-- 最外

    控制異步回調利器 - async 串行series,並行parallel,智能控制auto簡介

    一個 回調函數 錯誤信息 fan har require ner module 邏輯 async 作為大名鼎鼎的異步控制流程包,在npmjs.org 排名穩居前五,目前已經逐漸形成node.js下控制異步流程的一個規範.async成為異步編碼流程控制的老大哥絕非偶然,它不僅

    遠程桌面控制演示

    遠程桌面控制遠程桌面控制演示這裏我先打開兩臺虛擬機,分別是windows虛擬機和linux虛擬機,如何安裝這裏不再演示。前面文章已經演示過。如下圖所示: 我們先對linux虛擬機進行設置,將光盤先開啟 接著將裏面的已連接勾上,並將掛載的映像文件放進去,進入下一步 將已連接和映像文件選好後,點擊確定,進入界面,

    My97DatePicker(WdatePicker)日期控制元件用法

    WdatePicker[html] view plain copy print? <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <!-- 它的官網是http://www.my97.n

    QT獲取控制元件的內容去傳參的小發現

    1://處理文字框(內容是一個連續的字串)的方法(不能直接用文字框的內容去傳參,//否則會有意想不到的錯誤發生,需要利用先拷貝到陣列,然後利用陣列去傳參), #include <QStringList> #include <QString> int arg

    qt 小控制元件之textEdit

    獲取 textedit 的文字內容:QString text = ui->textEdit->toPlainText(); 設定textedit 的文字內容:ui->textEdit->append(“lkf”);此方法追加內容是換行追加 char b[10]

    ext3.0 樹控制元件處理

    前幾個月,一直在學習ext,並用它做了個專案,其中涉及到大量的樹列表的建立,動態修改。現在不忙了,總結出來: //建立節點 root為樹的根節點,node當前要加入的節點,nodeArray所有的樹節點(可以不包括根節點) checked表示樹節點是否加入check框,帶check框的節點都

    高階控制元件ListVie的使用

    activity_main.xml 檔案(配置檔案) <?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http: