La barre de recherche n'est pas affichée car le lanceur n'a pas les autorisations pour afficher le widget.
Comme vous l'avez probablement déjà compris, si un utilisateur ajoute explicitement le widget de la barre de recherche à un écran, il sera invité à donner l'autorisation, et la barre de recherche apparaîtra également.
Le problème est que getOrCreateQsbBar
méthode dans Launcher
classe (je suppose que vous avez lancé Launcher3) ne demande pas d'autorisations s'il ne peut pas instancier le widget, il échoue à la place silencieusement. Le problème est dans cet extrait de l'intérieur getOrCreateQsbBar
:
if (!AppWidgetManagerCompat.getInstance(this)
.bindAppWidgetIdIfAllowed(widgetId, searchProvider, opts)) {
mAppWidgetHost.deleteAppWidgetId(widgetId);
widgetId = -1;
}
Au lieu de simplement réinitialiser widgetId
à -1
vous voulez demander des autorisations pour installer le widget et appeler getOrCreateQsbBar
à nouveau. Voici un exemple de code qui demande la permission:
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);
}
Puis surchargez onActivityResult
dans la classe Launcher
, quelque chose le long des lignes de:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_BIND) {
mSearchDropTargetBar.setQsbSearchBar(getOrCreateQsbBar());
}
}
@ user1169390 pouvez-vous s'il vous plaît aidez-moi à ce sujet? – rup35h
avez-vous trouvé une solution de contournement pour ce problème? Je suis à la même page. –