Рубрика «android» - 199

Как я одной кнопкой шарил разные данные в Android приложении - 1

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

В этой публикации хотел бы поделиться опытом подбора контент-провайдера при поиске изображений и описать базовый интерфейс взаимодействия с одним из них на примере сервиса Flickr.

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

  • быть бесплатным;
  • быть хорошо фильтрованным, чтобы не нарваться на проблемы с Apple (такая же задача стояла и для версии приложения под iOS).

Я долго серфил интернеты в поисках подходящего контент-провайдера, предоставляющего JSON API. В итоге были отобраны 3 основных кандидата: Google Search, Flickr и Bing Image Search. Был еще один вариант подключения к старым бесплатным API от Google, которые уже лет 5 как в статусе deprecated, но все еще работают. Но этот вариант, увы, не подходил.
Читать полностью »

Дальнейшие эксперименты по скрещиванию Volley и Loader привели меня к мысли о создании библиотеки. Чтобы вызывался Loader с параметрами и в одну строку. На подобии как это реализовано в Picaso. После пары вечеров что-то получилось…

JSON

{
"1":{"name":"Samsung","price":51200.6},
"2":{"name":"Lg","price":5400.6},
"3":{"name":"Alcatel","price":4500.6},
"4":{"name":"iPhone","price":4800.3},
"7":{"name":"iPad","price":2850.1}
}

Data

public class GoodsItem {
    String name;
    float price;
}

Loader

    private String url = "http://192.168.1.103/shop.json";
    private static final int LOADER_GOODS_ID = 1;
    Map<Integer, GoodsItem> mGoodsMap = new HashMap<Integer, GoodsItem>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        FeedLoader.with(this).addLoader(LOADER_GOODS_ID, url, HashMap.class, new DelivererFeedLoader.Listener<Map<Integer, GoodsItem>>() {
            @Override
            public void onResponse(int loaderId, 
                Map<Integer, GoodsItem> goodsMap) {
                mGoodsMap = goodsMap;
                for (Map.Entry<Integer, GoodsItem> entry : mGoodsMap.entrySet()) {
                    Log.d(TAG , "Goods item : " + entry.getKey() + " : " + entry.getValue());
                }
            }
            @Override
            public void onErrorResponse(VolleyError data) {
                Log.d(TAG , "onErrorResponse :" + data);
            }
        }).start(LOADER_GOODS_ID, this);

Читать полностью »

Подводим итоги очередной недели историей о кувалдах и микрометрах iOS-разработчика, автомобильной навигацией, «интересным» шифрованием в NQ Vault, тиранией MVP, мобильными интерфейсами и еще кучей разных интересных вещей.

Дайджест интересных материалов для мобильного разработчика #97 (30 марта-4 апреля) - 1Читать полностью »

Разрабатывая приложение для проведения соревнований, я столкнулся с проблемой хранения базы данных. Проблема состояла в том, как мне определить внешнюю карту памяти. В целом поиск в сети точного ответа не дал. Поэтому, объединив все найденные результаты, я собрал свой класс. Если кому интересно, смотрим под катом.
Читать полностью »

В статье изложен подход реализации Loader для загрузки разных объектов в одном Activity. В качестве сетевой библиотеки загрузки используется Volley. Метод подходит когда в одном Activity имеется несколько одновременно использующихся фрагментов

public class MainActivity extends ActionBarActivity
        implements LoaderManager.LoaderCallbacks<DataHolder>{
    ...
    @Override
    public void onLoadFinished(Loader<DataHolder> loader, DataHolder data) {
        if ( loader.getId() == DataLoader.LOADER_ICONS_ID ){
           doIcons( data.getIcons() );
        } else if( loader.getId() == DataLoader.LOADER_STYLES_ID ){
           doStyles( data.getStyles() );
        } else if( loader.getId() == DataLoader.LOADER_ICONSETS_ID ){
           doIconSets( data.getIconSets() );
        }

Читать полностью »

Эта публикация о том, как можно в Windows скомпилировать библиотеку для обработки видео и аудио FFmpeg под Android в Eclipse с помощью NDK. Вы узнаете, как связать FFmpeg с библиотекой для обработки изображений OpenCV и как это всё можно использовать в Java-коде Android приложения. Всё это будет рассказано в контексте процесса создания Android приложения, основной функционал которого как раз и завязан на использовании этих библиотек и их взаимодействии. Итак, заинтересованных прошу под кат.
Читать полностью »

Заставляем камеру в Qt работать на Android - 1

Уже сейчас Qt – неплохая среда для разработки мобильных приложений, однако некоторые моменты там остаются недоработанными. Так, например, если попробовать запустить стандартный пример с камерой, он будет работать в системе Windows, но не на Android. При этом примеры, использующие камеру в через Qml, вполне рабочие. А значит работа с камерой на Android — реализована, но полного доступа к ней нет. А если мы хотим свободы иметь доступ к видеопотоку?
Читать полностью »

Случайно обнаружила в статистике левые источники, коих за 4 месяца набралась аж 21 штука. Суммарно за это время они подпортили картину на 88 пользователей и 584 сеанса. Аккуратно по дням выгрузила все в Excel, покрутила, посмотрела на данные без этого трафика – показатели изменились. В частности, конверсия. Откуда эти левые пользователи взялись – примерно понятно, уже видела таких в метриках сайта. Как чистить аналитику – тоже понятно, ибо общие свойства у них таки есть. Зачем «деятелям» это надо – предположения есть, но касаемо сайтов. Неужели с мобильных приложений тоже есть навар?
Паразитный трафик в Google Analytics (Android app) - 1
Читать полностью »

imageТо, чего так долго боялись операторы связи, свершилось: в последней версии популярного мессенджера WhatsApp появилась возможность звонить своим контактам. Версию 2.12.19 можно скачать с APK Mirror или сайта WhatsApp. Ранее эта функциональность была доступна только по приглашениям. Также есть сведения о том, что доступная через Google Play версия 2.12.5 также поддерживает звонки.

В приложении появилась новая закладка «Звонки». В ней находится список исходящих, входящих и пропущенных звонков. Звонить можно как из чата, так и из списка контактов – но только тем, кто уже установил новую версию. Если вы позвоните человеку, которого временно нет в сети, то услышите гудки – а ему потом придёт уведомление.

Операторы связи всерьёз опасаются недополучить прибыль после повсеместного внедрения звонков через WhatsApp. Только у этого приложения по всему миру существует уже более 700 миллионов пользователей – это почти столько же, сколько у крупнейшего в мире оператора China Mobile (800 млн.). Не говоря уже о том, что существуют другие сервисы с подобной функциональностью – тот же Skype.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js