2017-02-20 2 views
12

Je crée «mon propre lanceur . In that case I want to put barre de recherche rapide» dans mon écran d'accueil, c'est-à-dire Google maintenant lanceur.Définir google comme barre de recherche dans l'écran d'accueil Lanceur personnalisé par programme

Comment puis-je faire cela. J'ai parcouru plusieurs threads mais je n'ai trouvé aucune réponse pertinente.

Je ne veux pas montrer le widget picker. Je veux que l'utilisateur installent cette barre de recherche de lanceur devrait être là.

Merci d'avance.

+0

@ user1169390 pouvez-vous s'il vous plaît aidez-moi à ce sujet? – rup35h

+0

avez-vous trouvé une solution de contournement pour ce problème? Je suis à la même page. –

Répondre

1

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()); 
    } 
} 
1

Je vous recommande vraiment de cloner le dépôt Launcher3 d'AOSP.

https://android.googlesource.com/platform/packages/apps/Launcher3/

Si vous extrayez branche Nougat-mr5 vous pouvez consulter le code pour montrer searchbar en prenant le composant du package GMS et y compris comme un élément de ligne. Veuillez rechercher QSB dans le code.