• Куда исчезает фрагмент?

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

    Рискну предположить, что FragmentManager, который возвращает null, уже не является экземпляром, который существовал при запуске диалога. Происходит это, например, в результате смены ориентации устройства.
    Ответ написан
    Комментировать
  • Как сделать notification в определенное время?

    1.1. Можно даже в SharedPreferences хранить. tinyw.in/Gxjx
    1.2. https://ru.wikipedia.org/wiki/%D0%A3%D1%80%D0%B0%D... - кратко и ясно.

    2.1. tinyw.in/Gxjx
    2.2. Используйте WorkManager. https://bit.ly/31tKRLl
    Ответ написан
    Комментировать
  • Как очистить статус операции WorkManager после прочтения в android?

    Попробуйте добавить вызов keepResultsForAtLeast с длительностью 1 миллисекунду в OneTimeWorkRequestBuilder.
    Ответ написан
    Комментировать
  • Как настроить удаленное подключение к mysql?

    В /etc/mysql/my.cnf (или неподалёку) нужно закомментировать строку:

    bind-address = 127.0.0.1

    После этого перезапустить MySql.
    Ответ написан
    Комментировать
  • Могу ли я получать оплату на расчетный счет ИП от физ. лиц?

    До апреля текущего года был ИП УСН 6%, затем закрылся и перешёл на НПД.

    До самого завершения деятельности ИП работали как с юр.лицами, так и с фи.зицами. Платежи принимали перечислением на р/с ИП. С физ.лицами не заключали договоров, выставляли счета стандартного образца. Однако в счёте была отметка о том, что плательщик признаёт завершённость сделки перечислением средств на р/с ИП.

    А были клиенты, которые вообще не запаривались ожиданием счёта, перечисляли на р/с "за услуги художника/программиста/т.д."

    За 8 лет существования ИП никто не требовал наличия кассового аппарата, договора с ф/л, актов, счетов и пр. Закрыл ИП без проблем и претензий.

    Таким образом, по крайней мере в этом году можно принимать безналичные платежи на р/с в банке от физ.лиц без опасений.
    Ответ написан
    Комментировать
  • Неужели порог вхождения в андроид разработку настолько высокий?

    Программирую на всяком-разном 30 с лишним лет, пишу под Андроид с самого его начала - начал незадолго до того, как приобрёл HTC A3288 Tattoo, почти 10 лет уже как.

    Не имею опыта работы, но понимаю как работает: Dagger, RxJava2, Moxy, разнообразное юнит-тестирование и всякие либы поменьше. Ничего не помню наизусть, даже методы класса Object. Имею смутное представление о том, как работает многопоточность, какие там есть виды списков и в душе не понимаю, как устроено хэширование объектов. Без IDE с подсказками и онлайновой помощи глух и слеп как котёнок.

    Без работы не сижу. Считаю себя успешным.

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

    * В первую очередь, необходимо иметь и культивировать четыре вещи: здравый смысл, уверенность в себе, внутреннюю свободу и аккуратность. Даже если вы ничего не знаете сейчас, вы должны осознавать, что узнаете это всё потом. И то, лишь в случае, если считаете необходимым. А благодаря аккуратности вы будете понятны большему числу коллег.

    * Поскольку библиотек с дублирующейся направленностью пруд пруди, важнее знать принцип работы, а не какую-то конкретную библиотеку.

    * Вы должны понимать, что все эти Dagger, RxJava и прочие Moxy - тупо библиотеки тупо пацанов, которые сидят в трусах перед компами и всё такое. То есть, изначально это всё - нонконформистская прогрессивная адова самописуха с присущими ей концептуальными и арфогрофичесскими ошибками, которая в нечастых случаях превращается в продукт примерно корпоративного масштаба. Потому, надо стараться не переоценивать их значимость на вегетативном уровне.

    * Держитесь корней. То есть, за корни. Ну, в общем, за JetPack, AndroidX и всё, что выдумал Google. Это основное и самое важное.

    * Старайтесь обходиться минимумом зависимостей.

    * Кроссплатформа - это совсем другая индустрия. Надо определиться, нативщик вы или кроссплатформа.

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

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

    * Иногда важнее знать русский язык, нежели Java или Kotlin. Впрочем, иногда технический английский ещё важнее.

    * Даже если днище, безнадёга и фриланс, надо понимать, что есть два типа клиентов: те, которым надо красивый код в стартап и те, которым код не надо.
    Ответ написан
    2 комментария
  • Как оставлять приложение всегда активным в Android?

    Нужно отключать фунцию энергосбережения.
    Ответ написан
    Комментировать
  • Как выполнять код с определенной периодичностью?

    AndroidManifest.xml
    ...
    <receiver android:name=".MyAlarmReceiver" />
    <service android:name=".MyService" android:process=":my_app_alternate" android:enabled="true" />
    ...


    MyAlarmReceiver.java
    public class MyAlarmReceiver extends BroadcastReceiver {
    
        @Override
        public void onReceive(Context context, Intent intent) {
            context.startService(new Intent(context, MyService.class));		
            setupAlarm(context);
        }
    
        final long intervalMs = 60000; // Интервал в миллисекундах
    
        public static final void setupAlarm(Context context) {
            AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
            Intent i = new Intent(context, MyAlarmReceiver.class);
            PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, 0);
            if (am != null) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    am.setAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + intervalMs, pi);
                } else {
                    am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + intervalMs, pi);
                }
            }
        }
    }


    MyService.java
    public class MyService extends Service {
    
        Thread workThread = null;
    
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    
        @Override
        public int onStartCommand(Intent intent, int flags, int startId) {
            if (workThread == null) {
                workThread = new Thread(run);
                workThread.start();
            }
            return Service.START_STICKY;
        }
    
        final Runnable run = new Runnable() {
            @Override
            public void run() {
                try {
                    while (true) {
                        //todo Что там надо делать раз в секунду
                        Thread.sleep(1000);
                    }
                } catch (InterruptedException iex) { }
    			
                workThread = null;
            }
        }
    }


    Когда необходимо запустить выполнение кода, вызываем MyAlarmReceiver.setupAlarm. Последующие вызовы происходят из MyAlarmReceiver.onReceive.
    Ответ написан
    7 комментариев
  • Как правильно использовать расчет расстояний Distance Matrix API?

    Я рискну предположить, ваша проблема в "дребезге" показаний GPS, отличающихся на несколько метров. Стоите вы в пробке 10 минут, например, а по показаниям GPS совершаете 5- 10-метровые "прыжки" около одной точки.

    Присмотритесь к данным. Если всё так, как я говорю, прикрутите фильтрацию, которая будет адаптировать полученные данные к скорости вашего перемещения.

    Начните с отсеивания данных, если расстояние между ними, поделенное на количество секунд, будет менее N метров (быстрее чем пешеход).

    Добавляйте к каждому отрезку пути вектор перемещения. Это позволит отсекать отрезки незначительной длины, противоречащие последнему значимому вектору.

    Да много всяких ухищрений можно придумать. Всё зависит от вашей ситуации.
    Ответ написан
    Комментировать
  • Как сделать переход между страницами в Android Studio?

    Вы хотите сделать переход:
    1) Между страницами одного WebView
    2) Из Activity в Activity
    3) Переключить Fragment в Activity

    Выберите нужное.

    (UPD 07.01.2019)
    Прекрасная инструкция по навигации для начинающих программировать для Android: developer.alexanderklimov.ru/android/activity.php
    Ответ написан
    Комментировать
  • Приложения и цифровые подписи. Где зацепка?

    Вы, очевидно, неверно истолковываете назначение ключа как средства шифрования.

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


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

    Каких-то отметок, специфичных для места сборки я не встречал, хотя 100%-й гарантии дать не могу - это же Гугл.
    Ответ написан
    2 комментария
  • Как сделать трансляцию экрана с андроида на линукс?

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

    Цена не такая уж высокая, всего 40 долларов "навсегда", 2.5 баксов в месяц, либо 10 в год. В бесплатной версии раз в несколько минут показывают рекламу, но это неточно, потому что чаще всего показывают один раз и больше не показывают.

    В общем, рекомендую.
    Ответ написан
    Комментировать
  • Какие знания нужны, чтобы создать такой продукт под android?

    Вот примерный список зависимостей, покрывающий описанные вами нужды:

    implementation "com.google.firebase:firebase-core:16.0.1"
    implementation "com.google.firebase:firebase-auth:16.0.2"
    implementation 'com.firebaseui:firebase-ui-auth:4.0.0'
    implementation "com.android.support:appcompat-v7:${supportLibVer}"
    implementation "com.android.support:support-v13:${supportLibVer}"
    implementation "com.android.support:recyclerview-v7:${supportLibVer}"
    implementation "com.android.support:design:${supportLibVer}"
    implementation 'com.android.support:multidex:1.0.3'
    implementation "com.google.android.gms:play-services-maps:${gmsVersion}"
    implementation "com.google.android.gms:play-services-location:${gmsVersion}"
    implementation "android.arch.lifecycle:extensions:${aacVer2}"
    kapt "android.arch.lifecycle:compiler:${aacVer}"
    implementation "android.arch.persistence.room:runtime:${aacVer2}"
    kapt "android.arch.persistence.room:compiler:${aacVer}"
    implementation "com.squareup.retrofit2:retrofit:${retrofitVer}"
    implementation "com.squareup.retrofit2:converter-gson:${retrofitVer}"
    implementation "com.squareup.okhttp3:okhttp:${okHttpVer}"
    implementation "com.squareup.okhttp3:logging-interceptor:${okHttpVer}"
    implementation 'com.karumi:dexter:4.2.0'
    implementation 'com.google.code.gson:gson:2.8.4'
    implementation 'de.hdodenhof:circleimageview:2.2.0'
    implementation 'ch.acra:acra-http:5.1.2'
    implementation('com.afollestad.material-dialogs:core:0.9.6.0') {
        exclude group: 'com.android.support', module: 'appcompat-v13'
    }
    implementation ('com.squareup.picasso:picasso:2.71828') {
        exclude group: 'com.android.support', module: 'animated-vector-drawable'
        exclude group: 'com.android.support', module: 'exifinterface'
    }


    Но, на данном этапе, он, скорее всего, будет для вас бесполезен. :) Начинать надо с другого края.

    Самый главный и ценный навык - технический английский. Определенный уровень даже в режиме "только чтение" позволит вам быть в курсе всех технологических новинок в данной отрасли.

    Следующее корневое знание - система разработки и сборки готовых приложений из исходного проекта. Знание особенностей этой системы и интерес к её эволюции позволит максимально повысить вашу эффективность как разработчика.

    Далее вы должны по поводу и без повода обращаться к руководствам Google по разработке для Android. Если вы Android-разработчик - вам без них никуда. Вникайте в методологии и методики, предлагаемые разработчиком платформы. Это очень важно, поскольку 90% возможностей приложения нормального человека так или иначе завязаны на сервисы Google.

    Затем следуют отраслевые ресурсы. Сайты с библиотеками кода и средствами разработки, через которые обменивается знанием подавляющее большинство разработчиков - ещё один ключ к успеху. В наше время лучше всего не изобретать колесо, если вы не заявляете себя в качестве изобретателя и конструктора колёс. Старайтесь в первую очередь использовать наработки людей, которые уже потратили своё время на решение конкретной задачи. Множество драгоценных камней сверкает в таких местах как https://android-arsenal.com/ , например.

    И пара советов лично от меня:
    • Изучайте Kotlin.
    • Приобретите 16 gb памяти, SSD и процессор с четырьмя или более ядрами. Установите и освойте Linux, хотя бы в объёме, необходимом для разработки приложений. Впрочем, я уверен, когда привыкнете, он вам понравится сам по себе. Я рекомендую Linux Mint.
    Ответ написан
    Комментировать
  • Что имеет смысл осваивать если есть желание уйти в "айтишники"?

    Не делайте этого. Усталость не причина для падения. Заработайте тем, чем умеете, 100-200-300к, устройте себе отдых на полгода или пока не надоест.
    Ответ написан
    1 комментарий
  • Как установить linux?

    Попробуйте отключить защиту в UEFI и, возможно, заменить флешку на меньшую по объёму или другого производителя.
    Ответ написан
    Комментировать
  • Почему на версиях Android выше 6.0 не работает BroadcastReceiver onReceive?

    Причин может быть несколько.

    Во-первых, убедитесь, что всё именно так, как вы думаете. Попробуйте запускать Activity вместо Toast.

    Во-вторых, добавьте в receiver это:

    <action android:name="android.intent.action.QUICKBOOT_POWERON" />

    а в манифест это:

    <uses-permission android:name="android.permission.QUICKBOOT_POWERON" />

    и проверьте, чтобы было так:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        android:installLocation="internalOnly"
        ... >

    Приложение должно быть запущено хотя бы один раз. Для этого добавьте в проект хотя бы одну Activity.

    И можно проверить настройки безопасности системы или сторонних приложений, обеспечивающих безопасность.
    Ответ написан
    Комментировать
  • Использовать Fragment?

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

    В данном случае необязательно использовать фрагмент. Но если вы пожелаете видеть "область 2" в другой части своего приложения, использование фрагментов для реализации "области 2" будет обоснованным шагом.

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

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

    Вообще, исторически, любая биржа труда - это днище. А фриланс-площадка - это биржа, как ни крути. Быть фрилансером - вынужденное состояние. Вот я, например, живу в относительно небольшом городе, где локальный уровень доходов меня не устраивает. Я не хочу переезжать, но хочу больше зарабатывать. Я иду на биржу и нахожу заказ, который позволит мне иметь доход, средний между столичной и местной зарплатой. Меня это устраивает. Как-то так.
    Ответ написан
    Комментировать
  • Как определить объём работ и цену если в ТЗ одни общие фразы?

    Предлагайте клиенту "вилку" с разницей, соответствующей детализации заказа. Если заказ описан несуразно, кое-как, вилка, соответственно, будет большой (например, от 100 до 1000 чего-нибудь). Если заказ описан хорошим языком и Вам всё в нём понятно - разрыв можно уменьшать до нуля.

    В этом случае у вас будет объяснение, которое, возможно, мотивирует заказчика переписать техзадание более понятно для исполнителя.

    Ну, или найти другого исполнителя.
    Ответ написан
    Комментировать