2012-02-27 60 views
2

我的应用程序具有可显示可添加到主屏幕的应用程序小部件的开始活动。如何在蜂窝/ ics上打开应用程序部件选取器?

当用户点击该应用程序窗口小部件时,应用程序应发送意图打开窗口小部件列表。

但我找不到任何打开启动器与小部件列表选择任何意图。可能吗?

回答

2
static final String EXTRA_CUSTOM_WIDGET = "custom_widget"; 
static final String SEARCH_WIDGET = "search_widget"; 
void pickappWidget(){ 
    int appWidgetId = Launcher.this.mAppWidgetHost.allocateAppWidgetId(); 

    Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK); 
    pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
    // add the search widget 
    ArrayList<AppWidgetProviderInfo> customInfo = 
      new ArrayList<AppWidgetProviderInfo>(); 
    AppWidgetProviderInfo info = new AppWidgetProviderInfo(); 
    info.provider = new ComponentName(getPackageName(), "XXX.YYY"); 
    info.label = getString(R.string.group_widgets); 
    info.icon = R.drawable.ic_allapps; 
    customInfo.add(info); 
    pickIntent.putParcelableArrayListExtra(
      AppWidgetManager.EXTRA_CUSTOM_INFO, customInfo); 
    ArrayList<Bundle> customExtras = new ArrayList<Bundle>(); 
    Bundle b = new Bundle(); 
    b.putString(EXTRA_CUSTOM_WIDGET, SEARCH_WIDGET); 
    customExtras.add(b); 
    pickIntent.putParcelableArrayListExtra(
      AppWidgetManager.EXTRA_CUSTOM_EXTRAS, customExtras); 
    // start the pick activity 
    startActivityForResult(pickIntent, REQUEST_PICK_APPWIDGET); 
} 

,并在你的onActivityResult函数,过程从部件选择对话框消息retur

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    mWaitingForResult = false; 
    if (resultCode == RESULT_OK && mAddItemCellInfo != null) { 
     switch (requestCode) { 
      case REQUEST_PICK_APPWIDGET: 
       addAppWidget(data); 
       break; 
     } 
} 


void addAppWidget(Intent data) { 

    int appWidgetId = data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1); 
    AppWidgetProviderInfo appWidget = mAppWidgetManager.getAppWidgetInfo(appWidgetId); 

    if (appWidget.configure != null) { 
     // Launch over to configure widget, if needed 
     Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE); 
     intent.setComponent(appWidget.configure); 
     intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 

     startActivityForResult(intent, REQUEST_CREATE_APPWIDGET); 
    } else { 
     // Otherwise just add it 
     onActivityResult(REQUEST_CREATE_APPWIDGET, Activity.RESULT_OK, data); 
    } 
} 
+0

一旦小部件在选择器选择,会不会一切发生在它自己的,没有处理结果?我的意思是应该调用配置活动(在清单中的meta中指定),然后在WidgetProvider被添加到启动器时WidgetProvider? – 2013-11-24 13:08:42

+0

这看起来不错。如何获得对AppWidgetHost(mAppWidgetHost)的引用以分配appWidgetID? – 2013-11-24 13:13:37

+0

也许你的答案是关于将Widgets添加到你自己的AppWidgetHost中?如果是这样,也许这就是为什么答案不被接受 - 因为它是关于添加到主屏幕,然后我们需要获得启动器的AppWidgetHost ....? – 2013-11-24 13:24:31