Pasek wyszukiwania nie jest wyświetlany, ponieważ program uruchamiający nie ma uprawnień do wyświetlania widżetu.
Jak już zapewne wiesz, jeśli użytkownik jawnie doda widżet paska wyszukiwania do dowolnego ekranu, zostanie poproszony o udzielenie pozwolenia, a także pojawi się pasek wyszukiwania u góry.
Problem polega na tym, że metoda getOrCreateQsbBar
w klasie Launcher
(zakładam, że rozwidliłaś Launchera3) nie prosi o uprawnienia, jeśli nie może utworzyć instancji widgetu, zamiast tego po cichu zawiedzie. Problem polega na tym fragmencie wewnątrz getOrCreateQsbBar
:
if (!AppWidgetManagerCompat.getInstance(this)
.bindAppWidgetIdIfAllowed(widgetId, searchProvider, opts)) {
mAppWidgetHost.deleteAppWidgetId(widgetId);
widgetId = -1;
}
Zamiast resetowania widgetId
do -1
chcesz zapytać o uprawnienia do zainstalowania widget i nazywają getOrCreateQsbBar
ponownie. Oto przykładowy kod, który prosi o pozwolenie:
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);
}
Następnie przeciążać onActivityResult
w klasie Launcher
, coś wzdłuż linii:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_BIND) {
mSearchDropTargetBar.setQsbSearchBar(getOrCreateQsbBar());
}
}
@ user1169390 można proszę mi pomóc w tej sprawie? – rup35h
znalazłeś jakieś obejście tego problemu? Jestem na tej samej stronie. –