• Как обновить Interceptor в OkHttp при использовании Retrofit?

    @acbelter
    Можно переопределить метод intercept() и в нем добавлять header с токеном:
    OkHttpClient.Builder builder = new OkHttpClient.Builder();
            builder.addInterceptor(new Interceptor() {
                @Override
                public Response intercept(@NonNull Chain chain) throws IOException {
                    Request original = chain.request();
                    String token = ""; // Get token from prefs
                    if (!TextUtils.isEmpty(token)) {
                        Request.Builder requestBuilder = original.newBuilder()
                                .addHeader("Token", token);
                        Request request = requestBuilder.build();
                        return chain.proceed(request);
                    } else {
                        return chain.proceed(original);
                    }
                }
            });
    Ответ написан
    Комментировать
  • AlarmManager некорректно работает на китайфонах, как решить данную проблему?

    AlexMarken
    @AlexMarken
    Нужно сделать неубиваемый сервис.

    1. Создаешь сервис, который будет запускать AlarmManager
    1.1 Класс сервиса:
    public class MessageService extends Service  {
        public static PendingIntent pendingIntent = null;
    
        private void serviceMessageStart() {
    
            Intent alarmIntent = new Intent(MessageService.this, AlarmReceiver.class);
            pendingIntent = PendingIntent.getBroadcast(MessageService.this, 0, alarmIntent, PendingIntent.FLAG_CANCEL_CURRENT);
    
            if (pendingIntent != null) {
                AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
                manager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 30 * 1000, 15 * 60 * 1000, pendingIntent);
            }
        }
    
        @Nullable
        @Override
        public IBinder onBind(Intent intent) {
            return null;
        }
    
        public void onCreate() {
            super.onCreate();
    
    
            serviceMessageStart();
        }
    
        public void onDestroy() {
            super.onDestroy();
        }
    }

    1.2 Создаешь Receiver, на который будет ссылаться AlarmManager после выполнения:
    public class AlarmReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            // Выполняем свои действия
        }
    }

    1.3 Регистрируем Service и Receiver в Manifest:
    <application
            <service
                android:name="ИМЯ.ПАКЕТА.ПРИЛОЖЕНИЯ.MessageService"
                android:enabled="true"
                android:exported="false">
            </service>
    
            <receiver android:name="ИМЯ.ПАКЕТА.ПРИЛОЖЕНИЯ.BootReceiver">
                <intent-filter>
                    <action android:name="android.intent.action.BOOT_COMPLETED" />
                </intent-filter>
            </receiver>
    </application>

    2. MainActivity. В манифесте мы прописали, чтобы сервис запускался автоматически, как только устройство будет включено. Так же мы уже сделали его неубиваемым. Теперь сделаем активацию сервиса, если он не был запущен:
    public boolean isServiceRunning(Class<?> serviceClass) {
            ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
            for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
                if (serviceClass.getName().equals(service.service.getClassName())) {
                    return true;
                }
            }
            return false;
        }
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            //...
            if(!isServiceRunning(MessageService.class)) {
                startService(new Intent(this, MessageService.class));
            }
            //...
        }


    Готово :)
    Ответ написан
    Комментировать
  • Возможно ли реализовать такое приложение?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Попробуйте самостоятельно сформулировать следующее в адекватном виде (математическом)
    1. Критерий что такое лучшее решение?
    2. Критерий, как оценить позитивный отзыв и негативный отзыв?
    3. Критерий, что такое множество отзывов?
    4. Примеры конкретных запросов?
    5. Как набрать достаточное количество исходных данных (отзывы), как раскрутить ресурс для отзывов, как избежать нечестной накрутки ?

    Реализовать можно, но невыгодно. Собирать честные отзывы от пользователей - крайне сложно и прямо противоречит коммерциализации подобного приложения, поскольку деньги дает в основном рекламодатель, который хочет продвинуть свой продукт. А содержать приложение и сервера и портал - стоит денег.
    Ответ написан
    1 комментарий
  • Возможно ли реализовать такое приложение?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Выдавало решение о чем именно? Лучшее решение для чего? Какие критерии у этого "лучшее решение"? А что есть не лучшее решение? Какие тут критерии? Осознанный результат? А ничего, что для этого нужно сознание и разум какой-то? Сегодня наука даже не может дать однозначного ответа на вопрос - "Что такое сознание?".
    Кроме того, есть такая штука, как черный пиар и покупные отзывы. И огромное число этих самых отзывов в интернете - фальшивка. И какой результат будет после анализа фальшивых данных? И кому такой результат будет нужен?

    По сути в данном случае надо что-то типа экспертной системы или просто какая-то аналитика по ключевым словам из кучи разного информационного шума. Загружаем туда данные - а она уже что-то выдает. Самая знаменитая экспертная система на сегодня - это IBM Ватсон. И даже выдает какие-то результаты. И у него есть API - вот его и можно использовать. А вот результат будет зависеть от качества входных данных. А простейшая аналитика по ключевым словам - это регулярки плюс счетчики. Это несколько страниц кода или меньше (или больше - код же бывает разный).
    Ответ написан
    2 комментария
  • Как сделать множество разноцветных круглых imageview через один dravable xml?

    a13xsus
    @a13xsus
    Lazy developer
    Напишу на C#, на Java, думаю, сами перепишите, там точно так же

    убираем цвет <solid android:color="#FF0000" /> из шейпа.

    в коде меняем через SetColorFilter, он вроде как уже deprecated, но у вас min API 14:

    imgview.Background.SetColorFilter(Resources.GetColor(Resource.Color.blue), PorterDuff.Mode.Add);


    соответственно в Colors.xml нужно определить цвета:

    <?xml version="1.0" encoding="UTF-8" ?>
    <resources>
    	<color name="blue">#0000ff</color>
    </resources>


    Соответственно когда нужно через ClearColorFilter() убираете цвет и меняете на другой.
    Ответ написан
    1 комментарий