Ответы пользователя по тегу Android
  • Если ли пример не убиваемого сервиса который будет работать постоянно, в фоне, пока не выключишь на всех версиях андроид?

    akaish
    @akaish
    Стек Java\Android
    В Android нет гарантии, что сервис не будет завершен операционной системой по тем или иным причинам. Но никто не мешает Вам перезапускать сервис в случае его остановки. Делается это следующим образом: Вы можете зарегистрировать помимо сервиса BroadcastReceiver, который будет перезапускать Ваш сервис при его выключении. В теле метода onDestroy() вашего сервиса отправляй Ваш Broadcast, это Broadcast сообщение будет получено Broadcast ресивером, при получении оного который уже будет повторно запускать Ваш сервис.

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

    Третий способ - используйте sticky сервис. При старте сервиса с START_STICKY ОС должна его перезапускать при остановке.
    Ответ написан
  • Парсинг html в андроид. Есть примеры?

    akaish
    @akaish
    Стек Java\Android
    Для схожей задачи я в свое время использовал HtmlUnit. Но это по факту полноценный веб браузер. Возможно, в Вашем случае это будет "из пушки по воробьям". Тем не менее, нужный Вам функционал в этой библиотеке присутствует: см. Finding a specific element

    UPD. Если html сайт ваш - не ленитесь написать скрипты, отдающие информацию для приложения в чем-то более подходящем, чем HTML. HTML - язык разметки. Встаньте на светлую сторону, используйте JSON, CSV, или, на худой конец, XML. Используя HTML для данных целей Вы заставляете использовать больше ресурсов для обработки Ваших данных и приближаете тепловую смерть вселенной. А если без шуток - зачем заставлять тянуть человека через мобильный интернет данные, которые не пригодятся? Только трафик жрать. Да и подумайте о людях, которые могут использовать приложение в местах, далеких от стабильного покрытия даже 3G.
    Ответ написан
  • Насколько безопасен Android 6.0.1?

    akaish
    @akaish
    Стек Java\Android
    Пользуйтесь спокойно. Если сторонних приложений нет, а разрешения настроенные, шанс потерять денежные средства с карточки минимальный. Это уже из разряда паранойи. Если всё-равно нервничаете - пользуйтесь самой свежей версией стороннего браузера (к примеру, Mozilla), отключите JS для всех веб сайтов кроме доверенных и поставьте антивирус + файрвол.
    Если желаете - поищите новые прошивки на нужное устройство. Если совсем параноите и новых прошивок больше нет - шейте кастом ром на основе образа из Android SDK
    А так, повторюсь, практического смысла в этом нет. Уязвимости есть всегда. Только обычных людей никто ломать спецом не будет. А даже, если этот конкретный планшет будет взломан, двухфакторная аутентификация не позволит злоумышленнику воспользоваться Вашими средствами.

    Лучше задумайтесь об использовании мобильного телефона (мобильный банк, передача конфиденциальной информации посредством телефонной связи). Алгоритм A5 (используется до сих пор в стандарте GSM) ломается после 8 секунд разговора, а подмена базовой соты делается проще простого. А если Вы перезагрузите телефон из-под подмененной базовой соты, злоумышленник без проблем получит Ваш iccid и imsi и сможет эмулировать вашу симкарту со всеми вытекающими. И Вы этого даже не поймете. Во дворе припаркован фургончик, а телефон даже и не поймет, что подключен к левой базовой станции. А кто-то уже обчищает вашу карточку переводами через смс банк.
    Ответ написан
  • Как правильно организовать загрузку файлов из какого-то источника в Android?

    akaish
    @akaish
    Стек Java\Android
    Интересный вопрос. Интересен он не уникальной задачей или же сложной задачей, а тем, что вариантов реализации поставленной задачи огромное количество.

    Давайте накидаю Вам сходу некоторое количество равноправных решений.

    1) Скачивание нужных файлов по любому протоколу (HTTP\FTP\SFTP), который Вам больше подходит. Если также необходим хостинг - выбираете любого хостера по вашему вкусу. Буквально. Можно даже обойтись сверх дешевыми статичными хостингами. Из минусов - самостоятельная настройка сервера, хуже аптайм, чем в следующем варианте.

    2) Используете уже готовые связки API + хостер. Firebase, dropbox etc. Опять же, что угодно. К примеру, Dropbox: https://www.dropbox.com/developers-v1/core/start/a... Из минусов - почти идеальное решение, но нет кое-каких очень приятных возможностей. Также, стоит денег.

    3) Используете систему контроля версий. К примеру, GIT. Из плюсов - меньше трафика при обновлении вашего сета данных, 100% распределенная система, до какой-то степени "бесплатность" (при условии Open-Source лицензии на сет данных и того, что объем трафика не будет превышать бесплатные лимиты). Из минусов - сложнее реализовывать на стороне клиента.

    4) Используйте p2p. Самая сложная в реализации опция, нет функционала контроля версий. Зато самые низкие затраты на оплату траффика.

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

    UPD. Лично я бы сделал либо на GIT, либо на Dropbox. API готовы, хостинги хорошие. Dropbox - один из самых простых вариантов, GIT - требует знания NDK (чуть сложнее в имплементации), зато дает просто идеальный функционал для редактирования и обновления сета данных.
    Ответ написан
  • Как реализовать скачивание картинки на телефон в Android Studio?

    akaish
    @akaish
    Стек Java\Android
    Причем тут Android Studio?
    Делается это следующим образом: получаете контекст приложения, по id ресурса получаете InputStream, из полученного InputStream копируете байты в OutputStream свежесозданного файла, куда хотите сохранить картинку.
    Ну и не забывайте указать в манифесте приложения разрешение на доступ к файлам на SD карте и внутренней памяти устройства. Перед процессом копирования запрашиваете у пользователя доступ вашего приложения к данному разрешению.
    Или Вам готовый сниппет нужен?
    Ответ написан
  • Кнопки не реагируют на вызов. В чем может быть ошибка?

    akaish
    @akaish
    Стек Java\Android
    Код дайте по нормальному. В андроиде помимо RecyclerView и RecyclerViewAdapter есть еще и ListView, который также в паре с адаптером используется.

    Дальше, может я чего-то не понимаю (до сих пор по привычке и в целях совместимости на ListView списки делаю, RecyclerView не трогал по нормальному, так как задач с большими списками не было), но каким макаром вешается onItemClickListener() на адаптер? Или у вас собственная реализация адаптера, через метод которого Вы назначаете на целевой RecyclerView анонимную реализацию класса ListItemClickListener, унаследованную от RecyclerTouchListener????

    Я не поленился, и нагуглил ListItemClickListener в блоге какого-то глубокоуважаемого индуса: ListItemClickListener
    Вы оттуда копипастили? А откуда Вы скопипастили тогда "гениальное" решение назначать обработку событий не на View, а на адаптер? Это же в корне противоречит MVC архитектуре dataset-adapter-view. И ладно, что в блоге с примером ListItemClickListener используется просто дурацкая схема именования класса, которая сбивает с толку. Тут то архитектурная ошибка на уровне шаблонов проектирования.

    Резюмируя, предоставленного кода недостаточно, на лицо ошибки проектирования и совершенно дурацкое наименование классов потомков. Также, я не понимаю, зачем наследоваться от регулярного потомка абстрактного RecyclerView.OnItemTouchListener в анонимном то классе. Что это вообще за дичь?

    Искать ошибки не имеет смысла. Недостаточно предоставленного кода и дичь какая-то с конкретной реализацией адаптера и RecyclerView.OnItemTouchListener. Вот туториал, я его прочитал, по нему можно сделать правильно: https://www.androidhive.info/2016/01/android-worki...

    По текущему коду, связанному с RecyclerView - можно оставить только лэйауты. И всё. Остальное переписать. В этом коде я вижу малоосмысленного Франкенштейна из копипасты. Надеюсь, Вы только учитесь. Если это коммерческий проект какой-то фирмы, дайте, пожалуйста, в личку, её название. Буду обходить её продукты стороной, просто если это планируется в качестве реального кода, с таким "х@@к, х@@к и в продакшен" продуктом иметь дел не хочется, как, впрочем, и работать с такими людьми.

    UPD.1 Еще раз пробежался по коду глазами. Что это за дичь?
    private void loadData() {
            showLoader();
            loadJson();
    }

    И
    hideLoader();
    adapter.notifyDataSetChanged();

    метода parseJson(String jsonData)??? Как бы продолжительные операции делаются вне GUI потока, иначе можно ANR получить. Реализуется через AssyncTask (простой способ).

    UPD.2
    @Override
        public void onBackPressed() {
            if (drawer != null && drawer.isDrawerOpen()) {
                drawer.closeDrawer();
            } else {
                AppUtilities.tapPromtToExit(this);
            }
        }

    Вот не надо тащить из дикого веба диалоги "А Вы точно хотите выйти?". На андроиде подтверждение выхода из приложения принято делать двойным тапом на back кнопку с Toast после первого тапа. Диалог следует вешать только в тех случаях, когда при случайном выходите возможна потеря пользовательских данных (к примеру, набора текста). И то, если правильно подходить к разработке Android приложений, таких ситуаций возникать не должно в принципе. В догонку: Understand the Activity Lifecycle

    UPD.3 Ну и хоть бы код форматировали. В Android Studio хоткей по умолчанию CTRL-SHIFT-ALT-L.
    Ответ написан
  • Как изменить цвет нижней панели навигации?

    akaish
    @akaish
    Стек Java\Android
    Эта панель называется navigation bar. Из активити вызываете следующий метод с нужным Вам цветом:
    getWindow().setNavigationBarColor(getResources().getColor(R.color.colorAccentPurple));

    Или, если хотите, через стили:
    <item name="android:navigationBarColor">@color/colorAccentPurple</item>

    Больше информации тут: доки
    Ответ написан