我正在创建一个Android启动器,并希望实现appWidgets。为了测试,我使用com.android.quicksearchbox
小部件并将其添加到屏幕顶部。
问题是,我正在使用AppWidgetHostView,似乎没有注意到用户所做的任何点击或触摸事件。谁能告诉我为什么?以下是appWidgets的所有代码(在onCreate(Bundle)
函数中):
android.appwidget.AppWidgetManager appWidgetManager = android.appwidget.AppWidgetManager.getInstance(this);
android.appwidget.AppWidgetHost appWidgetHost = new android.appwidget.AppWidgetHost(this, 0);
android.appwidget.AppWidgetProviderInfo newAppWidgetProviderInfo = new android.appwidget.AppWidgetProviderInfo();
int appWidgetId = appWidgetHost.allocateAppWidgetId();
List<android.appwidget.AppWidgetProviderInfo> appWidgetInfos = new ArrayList<android.appwidget.AppWidgetProviderInfo>();
appWidgetInfos = appWidgetManager.getInstalledProviders();
for(int j = 0; j < appWidgetInfos.size(); j++)
{
if (appWidgetInfos.get(j).provider.getPackageName().equals("com.android.quicksearchbox"))
{
newAppWidgetProviderInfo = appWidgetInfos.get(j);
break;
}
}
android.appwidget.AppWidgetHostView hostView = appWidgetHost.createView(this, appWidgetId, newAppWidgetProviderInfo);
hostView.setAppWidget(appWidgetId, newAppWidgetProviderInfo);
android.widget.LinearLayout ll = (android.widget.LinearLayout) findViewById(R.id.loll);
ll.addView(hostView, 0);
loll是我的LinearLayout。
所以有人知道如何启用事件?或者,如果有另一种方法可以将app-widgets添加到我的启动器中?
谢谢。
答案 0 :(得分:1)
我不确定代码是否完整,但您需要在活动中添加至少以下内容。
@Override
protected void onStart() {
super.onStart();
Host.startListening();
}
@Override
protected void onStop() {
super.onStop();
Host.stopListening();
}
这有意义吗?
答案 1 :(得分:0)
您需要绑定窗口小部件以使其具有交互性并允许其更新:
boolean allowed = mAppWidgetManager.bindAppWidgetIdIfAllowed(appWidgetId, newAppWidgetProviderInfo.provider);
if (!allowed) {
// Request permission
Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, newAppWidgetProviderInfo.provider);
final int REQUEST_BIND_WIDGET = 1987;
myActivity.startActivityForResult(intent, REQUEST_BIND_WIDGET);
}
此外,如@ Sergey的回复中所述,您需要在活动或片段中添加以下内容:
@Override
protected void onStart() {
super.onStart();
appWidgetHost.startListening();
}
@Override
protected void onStop() {
super.onStop();
appWidgetHost.stopListening();
}