2013-05-12 41 views
2

我想弄清楚如何發送意圖到主屏幕添加一個小工具,如果我可以。有任何想法嗎?這裏有一些我一直在玩弄的代碼,至少提示添加小工具的選擇。發送意圖到家和小工具添加

AppWidgetManager mAppWidgetManager; 
AppWidgetHost mAppWidgetHost; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    selectWidget(); 

    mAppWidgetManager = AppWidgetManager.getInstance(this); 
    mAppWidgetHost = new AppWidgetHost(this, R.id.APPWIDGET_HOST_ID); 
} 

void selectWidget() { 
    int appWidgetId = this.mAppWidgetHost.allocateAppWidgetId(); 
    Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK); 
    pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
    startActivityForResult(pickIntent, R.id.REQUEST_PICK_APPWIDGET); 
} 

謝謝任何​​人的貢獻。

+0

有成千上萬的主屏幕實現。很少有這些支持應用程序小部件。 – CommonsWare 2013-05-12 18:57:32

+0

你可以擴展你正在嘗試完成的任務嗎?到目前爲止你是如何得到這段代碼的? – 2013-08-26 20:06:50

+0

@Jose_GD目前代碼只是簡單地顯示了要添加的小部件列表,不過就是這樣。我試圖完成的是在點擊後在主屏幕上添加一個小部件。所以我想要在我的應用程序中,啓動意向主屏幕,然後顯示小部件列表,然後單擊並按住以放置到主屏幕。林不知道,如果這是可能的目前的Android API的 – 2013-08-26 20:16:06

回答

4

您可以將ACTION_APPWIDGET_PICKE意圖發送到系統,但您的應用程序無法處理它,除非您編碼的是主屏幕替換件,即啓動器。

查看App Widget Host的文檔,特別是關於Host Binding的章節。您在selectWidget()方法中使用的代碼與原始啓動器應用中使用的代碼相同(標題爲在Android 4.0和更低版本上綁定應用部件)。然後執行onActivityResult,其中處理意圖。這種方法是你的代碼中缺少的,但是如果你包含它,你將最終完成主屏幕應用程序的所有工作(參見該頁面的下一個addAppWidget(Intent data))。

如果您繼續閱讀App Widget Host doc,您會看到綁定過程在Android 4.1上發生了變化,並且此任務還有一個新的意圖,它需要清單中的權限。爲了使事情複雜化,請記住@ CommonsWare的評論:有很多主屏幕實現,可能會以不同的方式進行綁定:

總結:無法獲取應用程序窗口列表進程的用戶選擇了什麼,也不是一種方式問桌面應用爲我們做這個,可惜也許在未來的Android版本,如latest Launcher source code此評論顯示:

/** 我們稍後可能會有所作爲,以處理允許外部應用程序放置小部件,但現在,我們只需要公開操作aroun d在其他地方檢查。 */

+0

非常感謝你爲我清理所有東西。我衷心感謝你幫助我更好地理解這一點。 – 2013-08-28 05:34:08

+0

不客氣。有趣的是,我前段時間回答了類似的問題,現在我在回答你的問題的同時研究了從活動中啓動選擇器的可能性...... :) – 2013-08-29 13:03:57