История изменений
Исправление 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]