Строка поиска не отображается, потому что у пусковой установки нет разрешений для отображения виджета.
Как вы, вероятно, уже выяснили, если пользователь явно добавляет виджет панели поиска на любой экран, ему будет предложено предоставить разрешение, а также появится панель поиска сверху.
Проблема заключается в том, что метод getOrCreateQsbBar
в классе Launcher
(предположим, что вы раскодировали Launcher3) не запрашивает разрешения, если он не может создать экземпляр виджета, вместо этого он молча терпит неудачу. Проблема в этом фрагменте кода внутри getOrCreateQsbBar
:
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());
}
}
@ user1169390 пожалуйста, вы можете помочь мне в этом? – rup35h
Вы нашли какое-либо обходное решение для этой проблемы? Я на той же странице. –