我最初的目标是将谷歌搜索小工具添加到活动中的线性布局。我需要的只是喜欢它出现,并启动工作(这就是为什么我需要能够添加窗口小部件),将其纳入。的
我想小部件添加到我的活动有内部消除推出小部件选择器的活动。我尝试过了:
1。直接指定一个整数ID(我总是夸大错误)
I would like to add widgets to my activity whithout having to launch the widget picker activity. I tried to:
1. directly specify an integer id (I always get inflate errors)
2。获得ID是这样的:
2. get the id like this:
ComponentName cn = new ComponentName(getBaseContext(), "com.android.quicksearchbox.SearchWidgetProvider");
int[] ids = AppWidgetManager.getInstance(getApplicationContext()).getAppWidgetIds (cn);
(数组总是空的)
(the array is always empty)
所有这些作品。
在此我有这个code,使用ID(它的工作原理,如果我从窗口小部件选择器活动ID):
After this I have this code, to use the ID (it works if I get the ID from the widget picker activity):
AppWidgetProviderInfo withWidgetInfo = AppWidgetManager.getInstance(getApplicationContext()).getAppWidgetInfo(appWidgetId);
AppWidgetHostView hostView = myWidgetHost.createView(getBaseContext(), appWidgetId, withWidgetInfo);
hostView.setAppWidget(appWidgetId, withWidgetInfo);
LinearLayout ll = (LinearLayout) findViewById(R.id.ll);
ll.addView(hostView);
我应该怎么办呢?谢谢!
How should I do it? Thank you!
试试这个:
// APPWIDGET_HOST_ID is any number you like
appWidgetManager = AppWidgetManager.getInstance(this);
appWidgetHost = new AppWidgetHost(this, APPWIDGET_HOST_ID);
AppWidgetProviderInfo newAppWidgetProviderInfo = new AppWidgetProviderInfo();
// Get an id
int appWidgetId = appWidgetHost.allocateAppWidgetId();
// Get the list of installed widgets
List<AppWidgetProviderInfo> appWidgetInfos = new ArrayList<AppWidgetProviderInfo>();
appWidgetInfos = appWidgetManager.getInstalledProviders();
for(int j = 0; j < appWidgetInfos.size(); j++)
{
if (appWidgetInfos.get(j).provider.getPackageName().equals("com.android.quicksearchbox") && appWidgetInfos.get(j).provider.getClassName().equals("com.android.quicksearchbox.SearchWidgetProvider"))
{
// Get the full info of the required widget
newAppWidgetProviderInfo = appWidgetInfos.get(j);
break;
}
}
// Create Widget
AppWidgetHostView hostView = appWidgetHost.createView(this, appWidgetId, newAppWidgetProviderInfo);
hostView.setAppWidget(appWidgetId, newAppWidgetProviderInfo);
// Add it to your layout
LinearLayout ll = (LinearLayout) findViewById(R.id.ll);
ll.addView(hostView);