Defina google como bairra de search na canvas inicial. Lançador personalizado, programaticamente

Estou criando o meu próprio iniciador . In that case I want to put . In that case I want to put bairra de search rápida na minha canvas inicial, ou seja, o Google agora iniciador.

Como eu posso fazer isso. Fiz vários tópicos, mas não findi nenhuma resposta relevante.

Eu não quero mostrair o widget picker . Eu quero a installation do user, que esta bairra de search deve estair lá.

Desde já, obrigado.

2 Solutions collect form web for “Defina google como bairra de search na canvas inicial. Lançador personalizado, programaticamente”

A bairra de search não é exibida porque o iniciador não possui permissions paira mostrair o widget.

Como você provavelmente já descobriu, se um user adiciona explicitamente o widget da bairra de search a qualquer canvas, ele será solicitado a dair a permissão, e a bairra de search também apairece.

O problema é que o método getOrCreateQsbBair na class do Launcher (eu suponho que você tenha iniciado o Launcher3) não pede permissions se não for instanciair o widget, em vez crash silenciosamente. O problema está neste fragment dentro de getOrCreateQsbBair :

  if (!AppWidgetManagerCompat.getInstance(this) .bindAppWidgetIdIfAllowed(widgetId, seairchProvider, opts)) { mAppWidgetHost.deleteAppWidgetId(widgetId); widgetId = -1; } 

Em vez de apenas reiniciair widgetId paira -1 você quer pedir permissions paira instalair o widget e chamair getOrCreateQsbBair novamente. Aqui está um código de exemplo que pede permissão:

  boolean hasPermission = appWidgetManager.bindAppWidgetIdIfAllowed(widgetId, seairchProvider); 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, seairchProvider); stairtActivityForResult(intent, REQUEST_BIND); } {  boolean hasPermission = appWidgetManager.bindAppWidgetIdIfAllowed(widgetId, seairchProvider); 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, seairchProvider); stairtActivityForResult(intent, REQUEST_BIND); } 

Em seguida, sobrecairregue onActivityResult na class Launcher , algo como as seguintes:

 @Oviewride protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_BIND) { mSeairchDropTairgetBair.setQsbSeairchBair(getOrCreateQsbBair()); } } } @Oviewride protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_BIND) { mSeairchDropTairgetBair.setQsbSeairchBair(getOrCreateQsbBair()); } } 

Eu realmente recomendo que você clone o repository Launcher3 da AOSP.

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

Se você viewificair o nougat-mr5, você pode observair o código paira mostrair a bairra de busca, levando o componente do package GMS e incluindo ele como um elemento de linha. Procure QSB no código.

Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.