• Android и отслеживание местоположения?

    Для определения местоположения вы можете использовать как стандартный requestLocationUpdate, так и Fused Location Provider, который является частью api Google play services. Плюсами решения на основе Fused Location Provider является то, что вам не надо самому подыскивать наиболее точный источник координат, он сделает это за вас. Если запускать его с критериями для определения наиболее точного местоположения, то он будет работать по следующему принципу:
    1) Если GPS доступен и включен, то выбирается GPS_PROVIDER в качестве источника.
    2) Если GPS недоступен то выбирается NETWORK_PROVIDER. В данном случаи координаты определяются при помощи вышек сотовой связи и WIFI.
    3) Если не того не другого нет то используется PASSIVE_PROVIDER. Тут система пытается использовать любой способ получить хоть какое-то местоположение в том числе и при использовании акселерометра. Этот провайдер наименее точный.

    Так вот Fused Location Provider включает в себя все три и переключается между ними в зависимости от ситуации для получения наиболее точного место положения, так же при его использовании заряд батареи жрется медленнее. Его главными минусами является то, что для его работы необходим Google play services и то, что вы не сможете отследить какой именно тип провайдера используется в данный момент.

    Что касается стандартного LocationManager, то вам придется самому определять какой провайдер использовать и переключаться между ними в ручную. В общем все делать ручками. Плюсом является то, что вы полностью контролируете весь процесс.
    От себя добавлю что я юзал Fused Location Provider и работает он просто замечательно, главное чтобы его версия была 7 и выше, на 6 давал сильный разброс по координатам.
    Ответ написан
    Комментировать
  • Почему в RecyclerView adapter не всегда вызывается метод onCreateViewHolder?

    zagayevskiy
    @zagayevskiy Куратор тега Android
    Android developer at Yandex
    Так в этом смысл ресайклера. Он переиспользует вьюхи. По-вашему, если их будет 100, он должен создать 100 вьюх? Нет.
    Ответ написан
    Комментировать
  • Почему нет тени в CardView c заданым свойством card_view:cardElevation?

    Привет! Все очень просто. Чтобы была видна тень - вокруг CardView должно быть свободное пространство. Следуя Material Design - оно должно равняться 8dp.
    <android.support.v7.widget.CardView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:card_view="http://schemas.android.com/apk/res-auto"
        android:id="@+id/card_1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="4dp"
        android:layout_marginRight="8dp"
        android:layout_marginBottom="4dp"
        card_view:cardCornerRadius="2dp"
        card_view:cardElevation="2dp">

    Удачи!
    Ответ написан
    Комментировать
  • Как получить и отправить GPS координаты на Андроид?

    Вот код рабочего класса для получения координат GPS или NET.
    package ru.defond.fly;
    
    import android.app.AlertDialog;
    import android.app.Service;
    import android.content.Context;
    import android.content.DialogInterface;
    import android.content.Intent;
    import android.location.Location;
    import android.location.LocationListener;
    import android.location.LocationManager;
    import android.os.Bundle;
    import android.os.IBinder;
    import android.provider.Settings;
    import android.util.Log;
    
    public class GPSTracker extends Service implements LocationListener {
    
        private final Context mContext;
    
        // flag for GPS status
        boolean isGPSEnabled = false;
    
        // flag for network status
        boolean isNetworkEnabled = false;
    
        // flag for GPS status
        boolean canGetLocation = false;
    
        Location location; // location
        double latitude; // latitude
        double longitude; // longitude
        double altitude;
        double speed;
        double bearing;
    
        // The minimum distance to change Updates in meters
        private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters
    
        // The minimum time between updates in milliseconds
        private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute
    
        // Declaring a Location Manager
        protected LocationManager locationManager;
    
        public GPSTracker(Context context) {
            this.mContext = context;
            getLocation();
        }
    
        public Location getLocation() {
            try {
                locationManager = (LocationManager) mContext
                        .getSystemService(LOCATION_SERVICE);
    
                // getting GPS status
                isGPSEnabled = locationManager
                        .isProviderEnabled(LocationManager.GPS_PROVIDER);
    
                // getting network status
                isNetworkEnabled = locationManager
                        .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
    
                if (!isGPSEnabled && !isNetworkEnabled) {
                    // no network provider is enabled
                } else {
                    this.canGetLocation = true;
                    // First get location from Network Provider
                    if (isNetworkEnabled) {
                        locationManager.requestLocationUpdates(
                                LocationManager.NETWORK_PROVIDER,
                                MIN_TIME_BW_UPDATES,
                                MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                        Log.d("Network", "Network");
                        if (locationManager != null) {
                            location = locationManager
                                    .getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                            if (location != null) {
                                latitude = location.getLatitude();
                                longitude = location.getLongitude();
                                altitude = location.getAltitude();
                                speed = location.getSpeed();
                                bearing = location.getBearing();
                            }
                        }
                    }
                    // if GPS Enabled get lat/long using GPS Services
                    if (isGPSEnabled) {
                        if (location == null) {
                            locationManager.requestLocationUpdates(
                                    LocationManager.GPS_PROVIDER,
                                    MIN_TIME_BW_UPDATES,
                                    MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                            Log.d("GPS Enabled", "GPS Enabled");
                            if (locationManager != null) {
                                location = locationManager
                                        .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                                if (location != null) {
                                    latitude = location.getLatitude();
                                    longitude = location.getLongitude();
                                    altitude = location.getAltitude();
                                    speed = location.getSpeed();
                                    bearing = location.getBearing();
                                }
                            }
                        }
                    }
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return location;
        }
    
        /**
         * Stop using GPS listener
         * Calling this function will stop using GPS in your app
         * */
        public void stopUsingGPS(){
            if(locationManager != null){
                locationManager.removeUpdates(GPSTracker.this);
            }
        }
    
        /**
         * Function to get latitude
         * */
        public double getLatitude(){
            if(location != null){
                latitude = location.getLatitude();
            }
    
            // return latitude
            return latitude;
        }
    
        /**
         * Function to get longitude
         * */
        public double getLongitude(){
            if(location != null){
                longitude = location.getLongitude();
            }
    
            // return longitude
            return longitude;
        }
    
        public double getAltitude(){
            if(location != null){
                altitude = location.getAltitude();
            }
    
            // return
            return altitude;
        }
    
        public double getSpeed() {
            if(location != null){
                speed = location.getSpeed();
            }
            return speed;
        }
    
        public double getBearing(){
            if(location != null){
                bearing = location.getBearing();
            }
            return bearing;
        }
    
        /**
         * Function to check GPS/wifi enabled
         * @return boolean
         * */
        public boolean canGetLocation() {
            return this.canGetLocation;
        }
    
        /**
         * Function to show settings alert dialog
         * On pressing Settings button will lauch Settings Options
         * */
        public void showSettingsAlert(){
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);
    
            // Setting Dialog Title
            alertDialog.setTitle("GPS is settings");
    
            // Setting Dialog Message
            alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");
    
            // On pressing Settings button
            alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int which) {
                    Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                    mContext.startActivity(intent);
                }
            });
    
            // on pressing cancel button
            alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
    
            // Showing Alert Message
            alertDialog.show();
        }
    
        @Override
        public void onLocationChanged(Location location) {
        }
    
        @Override
        public void onProviderDisabled(String provider) {
        }
    
        @Override
        public void onProviderEnabled(String provider) {
        }
    
        @Override
        public void onStatusChanged(String provider, int status, Bundle extras) {
        }
    
        @Override
        public IBinder onBind(Intent arg0) {
            return null;
        }
    
    }


    В активити я использую вот такую конструкцию:

    gps = new GPSTracker(StartActivity.this);
    
            // check if GPS enabled
            if(gps.canGetLocation()){
    
                double latitude = gps.getLatitude();
                double longitude = gps.getLongitude();
                double altitude = gps.getAltitude();
                double speed = gps.getSpeed();
                double bearing = gps.getBearing();
                double speedLimitA = ((10*1000)/(60*60));
    
                // \n is for new line
                Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude
                        + "\nLong: " + longitude
                        + "\nAlt:" + altitude, Toast.LENGTH_LONG).show();
                Intent intent = new Intent(this, Logik_Activity.class);
                intent.putExtra("alt",altitude);
                intent.putExtra("speed",speed);
                intent.putExtra("bearing",bearing);
                if (speed < speedLimitA){
                    startActivity(intent);
                }
                // if speed > 0 then AAA else BBB
    
            }else{
                // can't get location
                // GPS or Network is not enabled
                // Ask user to enable GPS/network in settings
                gps.showSettingsAlert();
            }


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

    Сам неделю назад за Андроид сел. :) Чем богат...
    Ответ написан
    Комментировать
  • Как вернуть мотивацию к обучению?

    При повторной потере мотивации алгоритм следующий:
    1) Идем высыпаемся. По-нормальному так, без будильников. Чтоб глаза вообще больше не закрывались.
    2) Если мотивация не вернулась (возвращается в 70% случаев) - берем велик (хотя можно и пешком) - и на улицу. Если есть приличный парк в городе - находим пару нестандартных физ. упражнений (можно боевых), пытаемся выполнить. Работа с телом и физические нагрузки - это совершенно другая часть вашего сознания, про нее нужно не забывать.
    3) Если мотивация не вернулась (уже где-то 85% случаев) - берем случайную книгу (не техническую), в идеале - из жанра который вам нравится. Читаем. Спокойно, страницы не считаем.
    4) Если не вернулась, повторить с п. 1 до пяти раз, не думая о времени и выполняя только самые важные дела (срочные задачи по учебе, работа, если есть), можно даже попросить родных/знакомых помочь по дому и бытовым делам, чтобы себя разгрузить.
    5) Если не помогло после 5 раз, задаем новый вопрос на тостере, подробно описываем что делали).

    Хотя бы один из п. 1-3 выполняем для профилактики каждый выходной.
    P.S. в принципе плохо сравнивать себя с кем-то - для "сравнения" на свете есть всякие соревнования и состязания, где есть правила и контекст. В жизни правил нет, один учится в MIT, другой учится в колледже в России - какие могут быть сравнения? Вы думаете тут большинство людей за один год все узнало и всего добилось? Вы глубоко заблуждаетесь) PHP-шники-выскочки не в счет, у них искаженное представление о реальности.
    Ответ написан
    11 комментариев
  • Как вернуть мотивацию к обучению?

    Я не поддерживаю тех кто смеётся над вами )) Подумайте вот о чём: если ваш организм сопротивляется новым знаниям, значит вы уже знаете достаточно, значит вам надо применить то что вы узнали, поэтому просто садитесь и делайте в процессе работы вы подойдёте к своему пределу, когда новые знания реально понадобятся - там и мотивация уже будет изучать.
    Ответ написан
    1 комментарий
  • Как вернуть мотивацию к обучению?

    Sprime
    @Sprime
    HTML-верстальщик
    Соберись!
    Либо ты, либо тебя. Мир так устроен.
    В данный момент ты настраиваешь себя, против самого себя. Так что никаких соплей, взял книгу в руки и сиди учи, разбирайся и т.д..
    Ответ написан
    Комментировать
  • Как вернуть мотивацию к обучению?

    alexclear
    @alexclear
    A cat
    > А сегодня "напали" мысли что у меня ничего не получится, что я просто так трачу время и в конце концов я признался себе что я по сути никто.

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

    > Как вернуть мотивацию? Как заставить себя осознать что время которое я трачу на обучение проходит не зря?

    Попробуйте записывать свой прогресс. Если Вы разработчик, то Вы в любом случае записываете Ваш прогресс в виде кода. Вернитесь через полгода и посмотрите на этот код - Вам станет очевидно, что полгода прошли не зря.
    Ответ написан
    6 комментариев
  • Как разобрать строку через split в javascript?

    ProgramCodePav
    @ProgramCodePav
    Front-end developer. Love open source
    script.js:
    var str = "test, stroke";
    var wordarray = str.split(", ");
    
    $.ajax({   //send POST to processor.php
        url: "processor.php",
        type: "POST",
        data: { "wordarray" : wordarray }, //JSON
        success: function (response) {  },
        error: function (response) {  }
    });


    Если вы имели ввиду отправку и вывод в php.
    processor.php:
    if ( isset($_POST["wordarray"])  ) {
        $wordarray = $_POST["wordarray"];
        echo $wordarray[0];
        echo $wordarray[1];
    }


    Но вообще есть php функция explode, которая аналогична split:

    $str= "test, stroke"
    $wordarray = explode(", ", $str);
    //$wordarray[0] == test
    //$wordarray[1] == stroke
    Ответ написан
    Комментировать
  • Подскажите движок для простого интернет-магазина

    ruskar
    @ruskar
    Conflict Intelligence Team
    Может Ecwid?
    Ответ написан
    Комментировать