2015-03-14 15 views
1

Есть несколько вопросов по этой проблеме, но я не мог найти какой-либо метод без проблем. Я реализовал версию проекта с помощью GPS-провайдера, и теперь я хочу реализовать версию, которая может найти местоположение пользователя без GPS, используя только сетевого провайдера, такого как Wi-Fi. Я попытался это, но он не работает (я не мог получить «Done» сообщение в любом случае):Как получить постоянное местоположение пользователя без GPS

public class MapsActivity extends FragmentActivity { 

    double latitude; 
    double longitude; 

    LocationManager locationManager; 
    android.location.LocationListener networkLocationListener; 
    Location location; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_maps); 

     locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 

     networkLocationListener = new android.location.LocationListener() { 
      public void onLocationChanged(Location location) { 

       latitude = location.getLatitude(); 
       longitude = location.getLongitude(); 

       Log.d("->", "done."); 

      } 

      public void onStatusChanged(String provider, int status, Bundle extras) {} 

      public void onProviderEnabled(String provider) {} 

      public void onProviderDisabled(String provider) {} 
     }; 

     locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, networkLocationListener); 

    } 

... 

Кроме того, это мой файл манифеста:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.doruk.myapplication"> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    <!-- 
The ACCESS_COARSE/FINE_LOCATION permissions are not required to use 
     Google Maps Android API v2, but are recommended. 
    --> 
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/orange" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 
     <meta-data 
      android:name="com.google.android.maps.v2.API_KEY" 
      android:value="@string/google_maps_key" /> 

     <activity 
      android:name=".MapsActivity" 
      android:label="@string/title_activity_maps" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <receiver 
      android:name=".ConnectionChangeReceiver" 
      android:label="NetworkConnection"> 
      <intent-filter> 
       <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> 
      </intent-filter> 
     </receiver> 
    </application> 

</manifest> 

Вы можете увидеть проблему ? Что вы посоветуете в этот момент? Есть ли способ лучше?

ответ

3

Dorukhan Арслан - Вы можете использовать GoogleclientAPi, Как locationmanager было Устаревшие -Использование FusedLocationAPi он будет автоматически обнаружить поставщика, чтобы найти место. - https://developer.android.com/google/auth/api-client.html взглянуть на этом - Вот один пример protected void createLocationRequest() { LocationRequest mLocation = LocationRequest.create(); GoogleAPiClient mgoogle; /* введите код здесь * Set the update interval */ mLocation.setSmallestDisplacement(500); // 2km mLocation.setInterval(180000);// 3 min mLocationRequest.setFastestInterval(120000);// 2 min mLocation.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); if (mgoogle == null) { mgoogle = new GoogleApiClient.Builder(this) .addApi(LocationServices.API).addConnectionCallbacks(this) .addOnConnectionFailedListener(this).build(); mgoogle.connect(); } }

  • Ее образец и реализации OnConnectionFailedListener, ConnectionCallbacks, com.google.android.gms.location.LocationListener выше 3 интерфейсов вы можете получить непрерывное Расположение
  • getLastLocation метод LocationRequest класс даст вам положение
  • onLocationChanged Метод даст вам ваш желаемый результат
  • Спасибо, и если вы найдете этот ответ полезным, проголосуйте за него.
+0

Информативный ответ, но это не то, что я ищу. Мне нужно найти способ получить местоположение без GPS, так косвенно, без служб определения местоположения. Мне нужно получить местоположение, просто используя Wi-Fi соединение. Если вы проверили Yandex Maps, например, когда вы закрываете свои сервисы определения местоположения, но сохраняете открытый Wi-Fi, он продолжает получать ваше текущее местоположение и отображает его на карте. Рассмотрим два способа получить местоположение: 1. услуги определения местоположения, 2. Wi-Fi. Карты Yandex работают только с 1 или 2 и с 1 и 2, но мое текущее приложение работает с 1 и с наличием как 1, так и 2, должно работать только с 2. –

+0

@DorukhanArslan [ссылка] (http://stackoverflow.com/questions/6694391/android-get-current-location-of-user-without-using-gps-or-internet) вы спрашиваете что-то вроде этого? – Hardy

+0

Как ваш ответ, так и ответы, приведенные в этой ссылке, должны строго использовать службы определения местоположения, которые потребляют батарею чрезмерно. Я тестирую свое приложение с Asus Zenphone, и у этого телефона нет вкладки для GPS. А именно, он запускает GPS, когда открывается опция определения местоположения. Код, который я уже написал, но не помещал здесь, - это завершенная версия методики, которую вы посоветовали. Код, который я поставил на вопрос, тот же, что и в этой ссылке. К несчастью, оба они зависят от наличия служб определения местоположения. Мне нужно получить местоположение тогда и только тогда, когда соединение Wi-Fi работает только просто. –

0

Вы можете использовать IP-адрес пользователя для получения приблизительного местоположения.

Смежные вопросы