LINUX.ORG.RU

История изменений

Исправление jessgt, (текущая версия) :

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, :

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) {
    }
  }
}

Исправление jessgt, :

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

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

[code=java]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) {     }   } }[/code]

Исправление jessgt, :

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

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

[CODE]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) {     }   } }[/CODE]

Исходная версия jessgt, :

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

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

[code]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) {     }   } }[/code]