探祕widget之launcher添加widget的流程分析

                                By 何明桂(http://blog.csdn.net/hmg25) 轉載請註明出處

 

       最近打算研究下android的widget相關問題,並把一些心得在此稍作記錄,哈哈,等研究完成了,如果有必要的話,也會把改動的源碼貼出來,以饗讀者。今天先來看看launcher2中添加widget的流程。

    添加widget首先需要在laucher的空白處長按,所以首先定位在laucher的 public boolean onLongClick(View v) 中,看到:

 

可以看到跳轉到了showAddDialog(cellInfo),尋找到:

 

可以看到他攜帶着DIALOG_CREATE_SHORTCUT參數創建了一個Dialog,攜帶參數跳入Launcher.java的父類Activity.java的showDialog()方法,最終到達Launcher.java的onCreateDialog(int id)方法,代碼如下:

 

跳轉到了CreateShortcut()的createDialog()方法:

這裏可以看到一個  AddAdapter類,跳轉去看看,這個就是定義長按後出現的對話框的內容:

 

如果我們需要在原來的對話框中添加新的內容,那麼首先需要修改的就是這裏,我們回到之前的地方接着往下走,dialog響應的點擊事件,public void onClick(DialogInterface dialog, int which) :

 

 

這裏看到點擊widget條目之後,跳轉打開一個新的pickIntent,其實際運行的爲packages/apps/Settings/src/com/android/settings/AppWidgetPickActivity.java:

先在onCreate方法中創建了一個InstalledAppWidgets列表,該列表就是我們在界面上能見到的所有widgets

在點擊一個widgets,進入AppWidgetPickActivity.onClick事件監聽,注意閱讀該方法代碼,它會進入else

 

activity執行結束後面都會進入launcher.onActivityResult,查看該函數方法有兩個關鍵的case:

 

 

接着跳轉到launcher的addAppWidget(Intent data)裏data爲傳遞來的appWidgetId:

 


通過onActivityResult(REQUEST_CREATE_APPWIDGET, Activity.RESULT_OK, data);跳轉回launcher.onActivityResult的

 

 case REQUEST_CREATE_APPWIDGET:

          completeAddAppWidget(data, mAddItemCellInfo);

 

 

 

 completeAddAppWidget(data, mAddItemCellInfo)中完成widget的添加。

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章