2017-02-20 20 views
12

Я создаю «свою собственную пусковую установку» . In that case I want to put Быстрый поиск в моем главном экране, т. Е. Google теперь запускает.Установите Google в качестве строки поиска на главном экране. Пользовательская программа запуска программно

Как это сделать. Я прошел несколько потоков, но не нашел ответа.

Я не хочу показывать widget picker. Я хочу, чтобы пользователь как пользователь установил эту панель поиска пусковой установки, должен быть там.

Заранее спасибо.

+0

@ user1169390 пожалуйста, вы можете помочь мне в этом? – rup35h

+0

Вы нашли какое-либо обходное решение для этой проблемы? Я на той же странице. –

ответ

1

Строка поиска не отображается, потому что у пусковой установки нет разрешений для отображения виджета.

Как вы, вероятно, уже выяснили, если пользователь явно добавляет виджет панели поиска на любой экран, ему будет предложено предоставить разрешение, а также появится панель поиска сверху.

Проблема заключается в том, что метод 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()); 
    } 
} 
1

Я действительно рекомендую вам клонировать хранилище Launcher3 от AOSP.

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

Если вы извлекаете нуга-MR5 отделение вы можете посмотреть на код, чтобы показать SearchBar принимая компонент из пакета GMS и включить его в качестве элемента строки. Пожалуйста, найдите QSB ​​в коде.