LINUX.ORG.RU

Android tv глобальный поиск

 ,


0

1

Здравствуйте.

Не могу понять как в приложении добавить поддержку поиска для android tv? Перерыла кучу сайтов, но из-за очень малого количества примеров, и незнания английского языка, очень сложно. Может быть у кого нибудь есть пример, либо кто нибудь знает, как при поиске в android tv по любой фразе выводить например логотип приложения, и в роли заголовка - поисковой запрос?

Т.е. например при поиске по «Бред Пит», в результатах отобразился логотип приложения и под ним было написано «Бред Пит».


Так, давай по пунктам, что ты делаешь в целом, какие шаги выполняешь, что из результатов ты получаешь в действительности, что ты хочешь получить? Лучше - с прикреплением скриншотов.

Deleted
()
Ответ на: комментарий от Deleted

java - потому что на этом языке пишутся приложения для android. пустой hello world но с интеграцией в глобальный поиск. как я понимаю для интеграции в поиск нужен ContentProvider.

Пример нашла, но там поиск по базе данных, как убрать его и вместо результатов из бд - отобразить именно иконку приложения и поисковой запрос

package ru.startandroid.develop.p1011contentprovider;
 
import android.content.ContentProvider;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.net.Uri;
import android.text.TextUtils;
import android.util.Log; 
 
public class MyContactsProvider extends ContentProvider {
  final String LOG_TAG = "myLogs";
 
  // // Константы для БД
  // БД
  static final String DB_NAME = "mydb";
  static final int DB_VERSION = 1;
 
  // Таблица
  static final String CONTACT_TABLE = "contacts";
 
  // Поля
  static final String CONTACT_ID = "_id";
  static final String CONTACT_NAME = "name";
  static final String CONTACT_EMAIL = "email";
 
  // Скрипт создания таблицы
  static final String DB_CREATE = "create table " + CONTACT_TABLE + "("
      + CONTACT_ID + " integer primary key autoincrement, "
      + CONTACT_NAME + " text, " + CONTACT_EMAIL + " text" + ");";
 
  // // Uri
  // authority
  static final String AUTHORITY = "ru.startandroid.providers.AdressBook";
 
  // path
  static final String CONTACT_PATH = "contacts";
 
  // Общий Uri
  public static final Uri CONTACT_CONTENT_URI = Uri.parse("content://"
      + AUTHORITY + "/" + CONTACT_PATH);
 
  // Типы данных
  // набор строк
  static final String CONTACT_CONTENT_TYPE = "vnd.android.cursor.dir/vnd."
      + AUTHORITY + "." + CONTACT_PATH;
 
  // одна строка
  static final String CONTACT_CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd."
      + AUTHORITY + "." + CONTACT_PATH;
 
  //// UriMatcher
  // общий Uri
  static final int URI_CONTACTS = 1;
 
  // Uri с указанным ID
  static final int URI_CONTACTS_ID = 2;
 
  // описание и создание UriMatcher
  private static final UriMatcher uriMatcher;
  static {
    uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    uriMatcher.addURI(AUTHORITY, CONTACT_PATH, URI_CONTACTS);
    uriMatcher.addURI(AUTHORITY, CONTACT_PATH + "/#", URI_CONTACTS_ID);
  }
 
  DBHelper dbHelper;
  SQLiteDatabase db;
 
  public boolean onCreate() {
    Log.d(LOG_TAG, "onCreate");
    dbHelper = new DBHelper(getContext());
    return true;
  }
 
  // чтение
  public Cursor query(Uri uri, String[] projection, String selection,
      String[] selectionArgs, String sortOrder) {
    Log.d(LOG_TAG, "query, " + uri.toString());
    // проверяем Uri
    switch (uriMatcher.match(uri)) {
    case URI_CONTACTS: // общий Uri
      Log.d(LOG_TAG, "URI_CONTACTS");
      // если сортировка не указана, ставим свою - по имени
      if (TextUtils.isEmpty(sortOrder)) {
        sortOrder = CONTACT_NAME + " ASC";
      }
      break;
    case URI_CONTACTS_ID: // Uri с ID
      String id = uri.getLastPathSegment();
      Log.d(LOG_TAG, "URI_CONTACTS_ID, " + id);
      // добавляем ID к условию выборки
      if (TextUtils.isEmpty(selection)) {
        selection = CONTACT_ID + " = " + id;
      } else {
        selection = selection + " AND " + CONTACT_ID + " = " + id;
      }
      break;
    default:
      throw new IllegalArgumentException("Wrong URI: " + uri);
    }
    db = dbHelper.getWritableDatabase();
    Cursor cursor = db.query(CONTACT_TABLE, projection, selection,
        selectionArgs, null, null, sortOrder);
    // просим ContentResolver уведомлять этот курсор 
    // об изменениях данных в CONTACT_CONTENT_URI
    cursor.setNotificationUri(getContext().getContentResolver(),
        CONTACT_CONTENT_URI);
    return cursor;
  }
 
  public Uri insert(Uri uri, ContentValues values) {
    Log.d(LOG_TAG, "insert, " + uri.toString());
    if (uriMatcher.match(uri) != URI_CONTACTS)
      throw new IllegalArgumentException("Wrong URI: " + uri);
 
    db = dbHelper.getWritableDatabase();
    long rowID = db.insert(CONTACT_TABLE, null, values);
    Uri resultUri = ContentUris.withAppendedId(CONTACT_CONTENT_URI, rowID);
    // уведомляем ContentResolver, что данные по адресу resultUri изменились
    getContext().getContentResolver().notifyChange(resultUri, null);
    return resultUri;
  }
 
  public int delete(Uri uri, String selection, String[] selectionArgs) {
    Log.d(LOG_TAG, "delete, " + uri.toString());
    switch (uriMatcher.match(uri)) {
    case URI_CONTACTS:
      Log.d(LOG_TAG, "URI_CONTACTS");
      break;
    case URI_CONTACTS_ID:
      String id = uri.getLastPathSegment();
      Log.d(LOG_TAG, "URI_CONTACTS_ID, " + id);
      if (TextUtils.isEmpty(selection)) {
        selection = CONTACT_ID + " = " + id;
      } else {
        selection = selection + " AND " + CONTACT_ID + " = " + id;
      }
      break;
    default:
      throw new IllegalArgumentException("Wrong URI: " + uri);
    }
    db = dbHelper.getWritableDatabase();
    int cnt = db.delete(CONTACT_TABLE, selection, selectionArgs);
    getContext().getContentResolver().notifyChange(uri, null);
    return cnt;
  }
 
  public int update(Uri uri, ContentValues values, String selection,
      String[] selectionArgs) {
    Log.d(LOG_TAG, "update, " + uri.toString());
    switch (uriMatcher.match(uri)) {
    case URI_CONTACTS:
      Log.d(LOG_TAG, "URI_CONTACTS");
 
      break;
    case URI_CONTACTS_ID:
      String id = uri.getLastPathSegment();
      Log.d(LOG_TAG, "URI_CONTACTS_ID, " + id);
      if (TextUtils.isEmpty(selection)) {
        selection = CONTACT_ID + " = " + id;
      } else {
        selection = selection + " AND " + CONTACT_ID + " = " + id;
      }
      break;
    default:
      throw new IllegalArgumentException("Wrong URI: " + uri);
    }
    db = dbHelper.getWritableDatabase();
    int cnt = db.update(CONTACT_TABLE, values, selection, selectionArgs);
    getContext().getContentResolver().notifyChange(uri, null);
    return cnt;
  }
 
  public String getType(Uri uri) {
    Log.d(LOG_TAG, "getType, " + uri.toString());
    switch (uriMatcher.match(uri)) {
    case URI_CONTACTS:
      return CONTACT_CONTENT_TYPE;
    case URI_CONTACTS_ID:
      return CONTACT_CONTENT_ITEM_TYPE;
    }
    return null;
  }
 
  private class DBHelper extends SQLiteOpenHelper {
 
    public DBHelper(Context context) {
      super(context, DB_NAME, null, DB_VERSION);
    }
 
    public void onCreate(SQLiteDatabase db) {
      db.execSQL(DB_CREATE);
      ContentValues cv = new ContentValues();
      for (int i = 1; i <= 3; i++) {
        cv.put(CONTACT_NAME, "name " + i);
        cv.put(CONTACT_EMAIL, "email " + i);
        db.insert(CONTACT_TABLE, null, cv);
      }
    }
 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    }
  }
}

https://developer.android.com/training/tv/discovery/searchable.html

jessgt
() автор топика
Последнее исправление: jessgt (всего исправлений: 4)

поиска

Поиска среди чего?

Т.е. например при поиске по «Бред Пит», в результатах отобразился логотип приложения и под ним было написано «Бред Пит».

логотип приложения

Какого приложения? Есть приложение «Бред Пит» для одиноких дам?

MaxPower ★★
()
Ответ на: комментарий от MaxPower

Поиска среди чего?

Глобальный поиск в android’e

Какого приложения? Есть приложение «Бред Пит» для одиноких дам?

Нет, нужно чтоб при глобальном поиске, выполнялась проверка в приложении и если это имя актера то выводить результат поиска из приложения в глобальный поиск.

jessgt
() автор топика
Последнее исправление: jessgt (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.