我正在主屏幕上创建“我自己的启动器. In that case I want to put
快速搜索栏”,即谷歌现在已经启动。
我该怎么做?我经历了多个线程但没有找到任何相关的答案。
我不想显示widget picker
。我希望asap用户安装此启动器搜索栏应该在那里。
提前致谢。
答案 0 :(得分:1)
我真的建议你从AOSP克隆Launcher3资源库。
https://android.googlesource.com/platform/packages/apps/Launcher3/
如果你签出nougat-mr5分支,你可以通过从GMS包获取组件并将其作为行元素包含来查看代码以显示搜索栏。请在代码中查找QSB。
答案 1 :(得分:1)
由于启动器无权显示小部件,因此不会显示搜索栏。
正如您可能已经想到的那样,如果用户明确地将搜索栏小部件添加到任何屏幕,系统将提示他提供权限,并且还会显示顶部的搜索栏。
问题是Launcher
类中的getOrCreateQsbBar
方法(我假设您分叉了Launcher3)如果无法实例化小部件,则不会要求权限,而是静默失败。问题出在 if (!AppWidgetManagerCompat.getInstance(this)
.bindAppWidgetIdIfAllowed(widgetId, searchProvider, opts)) {
mAppWidgetHost.deleteAppWidgetId(widgetId);
widgetId = -1;
}
:
widgetId
您想要获得安装小部件的权限并再次致电-1
,而不是仅仅将getOrCreateQsbBar
重置为 boolean hasPermission = appWidgetManager.bindAppWidgetIdIfAllowed(widgetId, searchProvider);
if (!hasPermission)
{
mAppWidgetHost.deleteAppWidgetId(widgetId);
widgetId = -1;
Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_BIND);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_PROVIDER, searchProvider);
startActivityForResult(intent, REQUEST_BIND);
}
。这是一个请求权限的示例代码:
onActivityResult
然后在Launcher
类中重载@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_BIND) {
mSearchDropTargetBar.setQsbSearchBar(getOrCreateQsbBar());
}
}
,类似于:
import re
links = soup.findAll('img', {'src': re.compile('^http://image\d+')})
for link in links:
if re.search('photo\/pictures\.jpg', link.get('href', ''), re.IGNORECASE):
link_i_want = link.get('href')
break