rup*_*esh 12 android launcher android-qsb android-launcher
我正在. In that case I want to put我的主屏幕上创建"我自己的启动器快速搜索栏",即谷歌现在发射器.
我怎样才能做到这一点.我已经通过多个线程但没有找到任何相关的答案.
我不想显示widget picker.我希望asap用户安装此启动器搜索栏应该在那里.
提前致谢.
搜索栏未显示,因为启动器没有显示小部件的权限。
正如您可能已经想到的,如果用户明确地将搜索栏小部件添加到任何屏幕,系统将提示他授予权限,并且顶部的搜索栏也会出现。
问题是类getOrCreateQsbBar中的方法Launcher(我假设您分叉了 Launcher3)如果无法实例化小部件,则不会请求权限,而是默默地失败。问题出在以下代码片段中getOrCreateQsbBar:
if (!AppWidgetManagerCompat.getInstance(this)
.bindAppWidgetIdIfAllowed(widgetId, searchProvider, opts)) {
mAppWidgetHost.deleteAppWidgetId(widgetId);
widgetId = -1;
}
Run Code Online (Sandbox Code Playgroud)
您不只是重置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);
}
Run Code Online (Sandbox Code Playgroud)
然后onActivityResult在Launcher类中重载,大致如下:
if (!AppWidgetManagerCompat.getInstance(this)
.bindAppWidgetIdIfAllowed(widgetId, searchProvider, opts)) {
mAppWidgetHost.deleteAppWidgetId(widgetId);
widgetId = -1;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
764 次 |
| 最近记录: |