Программа для поиска приложений для андроид

Обновлено: 07.07.2024

Большинство пользователей Android устанавливают приложения через фирменный магазин Google Play. Но что делать, если на вашем устройстве его нет? Чаще всего с этим вопросом сталкиваются владельцы смартфонов Huawei и Honor, которые из‑за американских санкций лишились сервисов Google. Но есть и другие производители, чьи гаджеты не предлагают привычный набор программ.

За последние годы Google ужесточила требования по сертификации Android‑смартфонов. Без одобрения IT‑гиганта компании не могут использовать сервисы Google, что влечёт за собой неудобства для пользователей. В 2018 году с этим столкнулись Meizu, Xiaomi и Lenovo.

Тогда компаниям удалось оперативно договориться, однако производители поменьше не всегда выполняют требования Google: многие из них ориентированы только на китайский рынок, где американские сервисы не работают. Впрочем, наши соотечественники берут такие модели из‑за низкой цены, и для них отсутствие Google Play может стать проблемой.

К счастью, одним из преимуществ ОС Android является установка программ из любых ресурсов: достаточно скачать на смартфон APK‑файл и распаковать его. Мы подготовили список мест, откуда легко получить нужные Android‑приложения.

1. Aptoide

Второй по величине магазин Android‑приложений после Google Play. Ассортимент включает в себя почти миллион программ. Среди них есть и российские продукты, например «ВКонтакте» и «Почта России». Также в маркетплейсе хватает крупных игровых тайтлов вроде Asphalt и PUBG Mobile.

Из недостатков — проблемы с безопасностью: недавно данные 20 миллионов пользователей Aptoide оказались выложенными в Сеть.

2. APKPure

Один из самых популярных сторонних магазинов с удобным поиском и разделением программ на категории. Некоторые приложения, за которые надо платить в Google Play, здесь предлагаются бесплатно. Ещё один плюс — возможность скачать программы, недоступные для вашего региона в маркетплейсе Google.

3. SlideMe

SlideMe не требует регистрации для инсталляции бесплатных программ, однако для покупок придётся установить собственное приложение маркетплейса под названием SAM. В ассортименте много интересных продуктов, потому что магазин привлекает независимых разработчиков низкой комиссией. Кстати, есть поддержка платёжной системы PayPal, с которой не умеет работать Google Play.

4. GetJar

5. F‑Droid

Один из самых безопасных сторонних маркетплейсов. Все приложения проверяются на наличие вредоносного кода специальным алгоритмом, совместно разработанным экспертами Йельского университета и компанией Exodus. Однако у такого скрупулёзного подхода к безопасности есть обратная сторона: ассортимент в F‑Droid довольно скудный и составляет около 10 тысяч программ.

6. XDA Developers

Крупнейшее сообщество мобильных разработчиков. Помимо площадки для общения, XDA располагает обширной библиотекой программ, при этом пользователь может принимать участие в альфа- и бета‑тестировании новых продуктов. Также есть приложение XDA Labs, в котором можно как покупать программы, так и загружать собственные. При этом комиссия с разработчиков не взимается.

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

Но, слава роботу, прогресс не стоит на месте. И сегодня на моем смартфоне установлено множество самых разных приложений, как нужных, так и не очень. Некоторыми я пользуюсь часто, некоторыми редко, а что-то, и вовсе, стоит «про запас». И все бы хорошо, но вот только быстро найти что-то в этой куче иногда бывает крайне затруднительно.

AppDialer_main

Системные требования:

3.0 или более поздняя

ЦЕНА:

Краткий обзор

AppDialer
AppDialer

AppDialer
AppDialer

Нажатие на иконку программы вызывает клавиатуру T9. Приложение не полноэкранное, то есть клавиатура появляется прямо поверх текущего экрана. Особенно удобно пользоваться AppDialer, если вынести его иконку в док-бар.

AppDialer
AppDialer

Результаты поиска отображаются над клавиатурой, промотать их можно с помощью горизонтального свайпа. Долгий тап по любому приложению вызывает меню со списком дополнительных действий. В бесплатной версии они недоступны.

AppDialer
AppDialer

AppDialer
AppDialer

AppDialer
AppDialer

Итоги

AppDialer еще раз доказал, что все гениальное действительно просто. Это приложение не поддерживает синхронизацию с облаком, не позволяет работать с тегами, не умеет автоматически сортировать программы по группам… Оно просто дает возможность буквально в считанные секунды найти и запустить любую установленную на телефоне программу.

Лично мне программа очень понравилась. С ней я могу не захламлять рабочий стол десятками ярлыков и не копаться в меню, когда мне понадобится редко используемое приложение. Я всегда могу запустить что угодно в два клика, будь то фонарик, расписание электричек или Cisco AnyConnect. Возможно, приложение окажется полезным и вам.

Совсем недавно Google анонсировал библиотеку для локального поиска документов AppSearch. Библиотека пока находится на стадии alpha-версии, но тем не менее уже можно применить её и рассмотреть ряд возможностей. В этой статье мы разработаем небольшое приложение для локального поиска разного рода документов и отобразим их пользователю для демонстрации работы AppSearch.

Photo by Shunya Koide on Unsplash

Photo by Shunya Koide on Unsplash

Введение

AppSearch – это высокопроизводительная библиотека для поиска на устройстве для управления локально хранящимися структурированными данными. Она содержит API-интерфейсы для индексирования данных и извлечения данных с помощью полнотекстового поиска. Приложения могут использовать AppSearch для поиска разнородных локальных данных. Таким образом, даже если пользователь отключен от сети Интернет – то вы сможете осуществить поиск не только по данным на текущем экране, а среди всех когда-то сохранённых данных.

AppSearch предлагает следующие возможности:

Быстрая, mobile-first реализация для хранения данных

Высокоэффективное индексирование и запросы к большим наборам данных

Поддержка мультиязычности, например поиска среди контента на английском языке и испанском

Рейтинг релевантности и оценка использования

Из-за меньшего количества операций ввода-вывода AppSearch предлагает меньшую задержку для индексации и поиска в больших наборах данных по сравнению с SQLite. AppSearch упрощает запросы перекрестного типа (типа join), поддерживая отдельные запросы, тогда как SQLite объединяет результаты из нескольких таблиц.

Чтобы проиллюстрировать возможности AppSearch, давайте рассмотрим пример приложения для поиска медиаконтента. Пользователь пытается найти контент и ему не важно, фильм это, сериал, а может быть это актёр или песня. Более того, контент может быть на разных языках. Соответственно, если в приложении мы уже сохранили такие данные – то, с помощью AppSearch мы не ограничиваем пользователя каким-то одним типом контента, а позволяем отобразить всё, что удовлетворяет запросу.

Для иллюстрации работы AppSearch можно взглянуть на следующую диаграмму, взятую из официальной документации:


База данных AppSearch и сессия

База данных AppSearch – это набор документов, соответствующих схеме базы данных. Android-приложения создают базу данных, предоставляя контекст своего приложения и имя базы данных. Базы данных могут быть открыты только приложением, которое их создало. При открытии базы данных возвращается сессия для взаимодействия с базой данных. Сессия является точкой входа для вызова API-интерфейсов AppSearch и остается открытой до тех пор, пока не будет закрыта клиентским приложением.

Схема и типы схемы

Схема представляет собой организационную структуру данных в базе данных AppSearch. Схема состоит из типов схем, которые представляют уникальные типы данных. Типы схемы состоят из свойств, которые содержат имя, тип данных и количество элементов. После добавления типа схемы в схему базы данных документы этого типа схемы могут быть созданы и добавлены в базу данных.

Документы

В AppSearch единица данных представлена ​​в виде документа. Каждый документ в базе данных AppSearch уникально идентифицируется своим пространством имен и идентификатором. Пространства имен используются для разделения данных из разных источников, когда требуется запросить только один источник, например учетные записи пользователей. Документы содержат отметку времени создания, время жизни (TTL) и оценку, которая может использоваться для ранжирования во время поиска. Документу также назначается тип схемы, который описывает дополнительные свойства данных, которые должен иметь документ. Класс документа – это абстракция документа. Он содержит аннотированные поля, которые представляют содержимое документа. По умолчанию имя класса документа задает имя типа схемы.

Поиск

Документы индексируются, и их можно искать, предоставив запрос. Документ сопоставляется и включается в результаты поиска, если он содержит термины в запросе или соответствует другой спецификации поиска. Результаты упорядочены на основе их оценки и стратегии ранжирования. Результаты поиска представлены страницами, которые можно извлекать последовательно. AppSearch предлагает настройки для поиска, такие как фильтры, конфигурацию размера страницы и баллы для ранжирования.

Итак, мы разобрались с основными компонентами и теперь можно начать интегрировать AppSearch в наше приложение.

Добавление в проект

Чтобы начать работать с AppSearch сперва нужно добавить библиотеку. Открой build.gradle и добавьте kapt плагин:

После этого добавьте библиотеку:

Кроме этого, нужно еще добавить библиотеку Guava – так как нам понадобится класс ListenableFuture необходимый для работы AppSearch

Нажмите Sync Now. Отлично! Теперь мы готовы использовать AppSearch

Создание документов MovieDocument и PersonDocument

Первым шагом для работы App Search необходимо описать класс так называемого документа для вставки в базу данных. Это можно сделать, используя аннотацию @Document. В следующем примере мы создадим класс-документ MovieDocument, используя аннотацию @Document.StringProperty для индексации текста объекта MovieDocument:

Давайте рассмотрим аннотации, которые тут используются:

@Document.Namespace. Обязательное поле пространство имен – это произвольная строка, предоставленная пользователем, которая может использоваться для группировки похожих документов во время запроса или удаления. Индексирование документа с определенным идентификатором заменяет любые существующие документы с тем же идентификатором в этом пространстве имен

@Document.Id Обязательное поле уникальный идентификатор документа

@Document.Score Необязательное поле score (оценка). Оценка – это не зависящая от запроса мера качества документа по сравнению с другими однотипными документами. Это один из вариантов сортировки запросов.

@Document.StringProperty Необязательное поле для класса документа, используемое для индексации текста фильма.

При этом у Document.StringProperty есть два параметра:

AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_PREFIXES – поле, помеченное таким параметром должно возвращаться для запросов, которые либо полностью совпадают, либо запросить совпадения токенов, указанных в этом свойстве. Пример. Свойство с “fool” должно соответствовать запросу для “foo”.

AppSearchSchema.StringPropertyConfig.INDEXING_TYPE_EXACT_TERMS Содержимое этого свойства должно возвращаться только для запросов, соответствующих точным токенам фигурирующим в этом поле. Пример. Свойство с “fool” НЕ должно соответствовать запросу для “foo”.

Аналогичным образом опишем и документ PersonDocument.

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

Открытие базы данных и создание схемы

Перед работой с документами необходимо создать базу данных. Следующий код создает новую базу данных с именем movies_demo_db и получает ListenableFuture для AppSearchSession, который представляет соединение с базой данных и предоставляет API-интерфейсы для операций с базой данных.

Вы должны установить схему, прежде чем вы сможете вставлять документы и получать документы из базы данных. Схема базы данных состоит из различных типов структурированных данных, называемых «типами схемы». Следующий код устанавливает схему, предоставляя класс документа как тип схемы. Этот метод находится в файле AppSearchRepository.kt – для удобства все методы работы с App Search вынесены в отдельный репозиторий.

Ура, мы создали сессию для работы с БД и указали нужные схемы документов. Теперь, давайте попытаемся сохранить данные, а затем произвести поиск. Но перед этим немного поговорим про ListenableFuture.

Обзор Future, ListenableFuture, Executor

Интерфейс java.util.concurrent.Future описывает API для работы с задачами, результат которых мы планируем получить в будущем: методы получения результата, методы проверки статуса. Future представляет собой результат асинхронных вычислений: вычисление, которое, возможно, еще не закончилось или уже дало результат. Future может быть указателем на выполняемые вычисления, обещанием службы предоставить нам результат.

ListenableFuture позволяет вам регистрировать обратные вызовы, которые будут выполняться после завершения вычисления или, если вычисление уже завершено, немедленно. Это простое дополнение позволяет эффективно поддерживать многие операции, которые базовый интерфейс Future не поддерживает. Базовая операция, добавляемая ListenableFuture, – это addListener (Runnable, Executor), которая указывает, что когда вычисление, представленное этим Future, выполнено, указанный Runnable будет запущен на указанном Executor. Более подробно про ListenableFuture можно почитать тут.

С помощью метода transformAsync (в который мы и передали ExecutorService ) мы создаем ListenableFuture для последующего выполнения. И в Futures.addCallback добавляем нашу задачу и регистрируем callback. Аналогично работают и другие методы для сохранения и поиска данных. В следующем разделе мы реализуем метод сохранения данных.

Сохранение данных в БД

После добавления типа схемы можно добавлять документы этого типа в базу данных. Следующий код создает документ переданного типа с помощью билдера:

Создаём ListenableFuture для выполнения задачи сохранения:

Регистрируем callback для получения результата. Кроме того, для удобства метод сохранения и поиска обёрнуты в Observable, чтобы можно было вызывать эти методы в Rx-цепочке. В итоге весь метод сохранения будет выглядеть так:

Теперь нам нужно создать метод для поиска и извлечения данных.

Реализация поиска и отображения данных

В данном случае мы просто указываем фильтр документа по namespace. В этом случае мы будем искать только те документы, которые имеют указанные пространства имен. Если не задано, поиск будет выполняться по всем пространствам имен. Кроме этого, есть еще несколько параметров:

setResultCountPerPage() – Устанавливает количество результатов на страницу в возвращаемом объекте. По умолчанию количество результатов на странице – 10.

setRankingStrategy() – позволяет задать стратегию ранжирования результатов.

setOrder() – позволяет задать сортировку (ORDER_DESCENDING, ORDER_ASCENDING). Например ORDER_DESCENDING означает, что результаты с более высокими баллами идут первыми.

setResultGrouping() позволяет группировать документы, например по namespace

Стратегий ранжирования может быть несколько, они достаточно неплохо описаны в исходниках:

public static final int RANKING_STRATEGY_NONE = 0; – ранжирования нет

public static final int RANKING_STRATEGY_DOCUMENT_SCORE = 1 – ранжироваание по заданному Score

public static final int RANKING_STRATEGY_CREATION_TIMESTAMP = 2 – ранжироваание по timestamp

public static final int RANKING_STRATEGY_RELEVANCE_SCORE = 3 – ранжирование по relevance score

public static final int RANKING_STRATEGY_USAGE_COUNT = 4 – ранжирование по частоте использования

public static final int RANKING_STRATEGY_USAGE_LAST_USED_TIMESTAMP = 5 – ранжирование по дате последнего использования

public static final int RANKING_STRATEGY_SYSTEM_USAGE_COUNT = 6 – судя по всему не поддерживается (Reporting system usage is not supported in the local backend, so this method does nothing

public static final int RANKING_STRATEGY_SYSTEM_USAGE_LAST_USED_TIMESTAMP = 7 – судя по всему не поддерживается

После того, как мы определили поиск, необходимо создать ListenableFuture и зарегистрировать callback:

Используя Rx через оператор create и emitter передаём полученные данные searchResults: SearchResults. SearchResults – специальный интерфейс через который мы можем получить список результатов через метод getNextPage()

Для удобства, создадим метод, получающий SearchResults и отдающий список GenericDocument – как раз те самые документы, которые удовлетворяют нашему поиску:

Итак, мы описали методы для сохранения, поиска и получения документов. Осталось объединить их воедино на странице пользовательского интерфейса.

Для реализации поиска мы будем использовать RxJava, и подпишемся на поле ввода текста как показано ниже:

Проверяя схему документа можно из GenericDocument получить именно тот документ, который мы сохранили и отобразить в любом виде. Для отображения данных будем использовать библиотеку Groupie. Если вы никогда не работали с данной библиотекой – от советую прочитать вот эту статью

Сначала фильтруем данные по схеме, а затем создаём ячейки для отображения данных. Таким образом, после поиска по строке “Морти” получаем данные из двух документов: MovieDocument и PersonDocument.

Результат поиска по строке "Морти"

Результат поиска по строке "Морти"

Результат поиска по строке "Морти"

Заключение

Надеюсь, в этой статье нам удалось показать пример работы с библиотекой AppSearch для full-text поиска разнородных документов. Как уже было сказано, похожего функционала можно добиться используя SQLite, однако тогда придётся осуществлять join по нескольким таблицам. Кроме этого AppSearch заточен именно под full-text поиск большого количества разнородных документов, идеально если у вас какое-нибудь медиа-приложение с большим количеством контента (Фильмы/Книги/Игры) и вам нужно осуществить поиск не только по описанию, а например названиям, краткому описанию книги, цитатам etc. Библиотека пока на стадии alpha и скорее всего в скором будущем появится возможность использовать Rx или Kotlin coroutines, но пока приходится работать с LinstenableFuture. В качестве упрощения - можно сделать обёртки через RxJava и работать уже с ней. Не забудьте поставить звёздочку исходному коду на GitHub и подписаться на наш телеграм-канал

Мобильные поисковые системы полезны для просмотра веб-страниц с планшета или смартфона . Хотя существует множество поисковых систем , не все из них оптимизированы для мобильных пользователей.

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

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

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

Google

Поисковая система Google для мобильных устройств на Android

Имеет уникальные особенности.

Предоставляет веб, изображения и другие поисковые запросы.

Интегрируется с другими сервисами компании.

Иногда смешивает результаты из других поисковых категорий.

Некоторые поисковые фильтры отсутствуют, доступны только в настольной версии.

Тот же Google, который мы все знаем и любим, также доступен в качестве мобильной поисковой системы, предлагающей быстрые результаты с возможностью локального поиска изображений, карт и многого другого.

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

Из всех мобильных поисковых систем Google больше всего напоминает настольную версию.

Вы также можете использовать Google с любого устройства, посетив домашнюю страницу Google , но есть также приложение для Android , iPad и iPhone .

Поиск Yahoo

Yahoo мобильная поисковая система на Android

Чистый и незагроможденный интерфейс.

Быстрый доступ к сети, новостям и другим поискам.

Чрезвычайно прост в использовании.

Ноль дополнительных параметров или функций фильтрации.

Мобильная версия Yahoo Search — не единственный способ получить эту поисковую систему. Для более полной работы с настольной версией вы можете приобрести мобильное приложение для Android или iOS .

YouTube

Поисковая система YouTube для мобильных устройств

Находит все виды видео.

Включает в себя ограниченный режим.

Имеет параметры фильтрации для уточнения поиска.

Поддерживает много языков.

Отсутствуют многие параметры фильтрации, найденные в настольной версии.

YouTube — это всегда отличный выбор для потоковой передачи музыки , просмотра популярных видео, получения новостей и других новостей. Мобильная версия YouTube идентична настольной версии, но с некоторыми исключениями.

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

Читайте также: