android - 如何在 honeycomb/ics 上打开应用程序小部件选择器?

标签 android android-intent widget app-launcher

我有一个具有启动 Activity 的应用程序,它显示可以添加到主屏幕的应用程序小部件。

当用户单击该应用程序小部件时,应用程序应发送 Intent 以打开小部件列表。

但我找不到任何打开启动器并选择小部件列表的 Intent 。是否可以?

最佳答案

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 函数中,处理小部件选择器对话框返回的消息

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);
    }
}

关于android - 如何在 honeycomb/ics 上打开应用程序小部件选择器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9469554/

相关文章:

java - 如何使用 gson 调用默认反序列化

android - 在位图上绘制文本时旋转文本

java - 在 Android 上捕获和拦截 ACTION_SEND Intent

android - 在水平 RecyclerView 中显示 ImageView 会在 Android 中的图像周围(?)放置较大的边距

android - AppWidgetProvider 中的 super.onUpdate() 推荐?

javascript - 如何从 javascript 小部件中删除所有 jquery 实时事件

android - 如何从上下文中获取 View ?

android - 从外部 URL 打开 PDF 显示 "Open File: No apps can perform this action"

android - 如何从我的应用程序将电子书上传到 google play book?

java - 通过代码设置Android Widget刷新率