2016-02-04 4 views
1

Я пытаюсь найти местоположение, используя GPS_Provider в android. при попытке получить местоположение с помощью Network_Provider, чем дать мне информацию о местонахождении и обратного вызова функции должным образом, но когда я попытался получить местоположение с помощью GPS_Provider, чем дать мне местоположение нуль & также не вызывая функцию обратного вызова onLocationChanged из LocationListener.GPS-навигатор дает мне нулевое местоположение в Android

Мой код:

LocationManager lm; 
    boolean isNetwork = false; 
    Location location; 
    LocationListener locationListener; 
    LocationListener loc; 
    MyLocation myLocation; 
    Location location1; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     lm = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE); 

     try { 
      myLocation = new MyLocation(); 

      if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { 
       // TODO: Consider calling 
       Log.e("Location", "Permission Not Given"); 
       return; 
      } 
      Log.e("Location", "Permission is Given"); 
      lm.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, myLocation); 
      location1=lm.getLastKnownLocation(LocationManager.GPS_PROVIDER); 
     }catch(Exception e) 
     { 

     } 
    } 

MyLocation.class

public class MyLocation implements LocationListener { 
    @Override 
    public void onLocationChanged(Location location) { 

     if(location!=null) 
     { 

      String lat,Longi; 
      lat=String.valueOf(location.getLatitude()); 
      Longi=String.valueOf(location.getLongitude()); 

      Log.e("Latitude: " , lat); 
      Log.e("Longitude: " , Longi); 

     } 
     else 
      Log.e("Location is null", "Location not Found"); 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     Log.e("Latitude: " ,""+ provider+ " Status: "+status); 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 

    } 

    @Override 
    public void onProviderDisabled(String provider) { 
     Log.e("Latitude: " , provider); 
    } 
} 

Это дает мне LogCat ошибку следующим образом:

02-04 00:50:52.280 14480-14480/com.arc.locationusingnetwork E/Location: Permission is Given 
02-04 00:50:52.360 14480-14480/com.arc.locationusingnetwork E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 46 
02-04 00:50:52.370 14480-14480/com.arc.locationusingnetwork E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 49 
02-04 00:50:52.370 14480-14480/com.arc.locationusingnetwork E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 50 
02-04 00:50:52.380 14480-14480/com.arc.locationusingnetwork E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 50 
02-04 00:50:52.380 14480-14480/com.arc.locationusingnetwork E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 50 
02-04 00:50:52.390 14480-14480/com.arc.locationusingnetwork E/IMGSRV: :0: PVRDRMOpen: TP3, ret = 52 
+2

Добавить полную трассировку журнала –

+0

@VPS: попробуйте использовать Google Fused Location api для обновлений местоположения. * GPS не работает под крышей. – kevz

+0

'location1 = lm.getLastKnownLocation (LocationManager.GPS_PROVIDER);' вы говорите об этом как null? –

ответ

2

Старый класс LocationListener, вероятно, осуждается. Вы должны использовать FusedLocationApi для Android, чтобы получать текущее местоположение или получать обновления местоположения через F LocationListener FusedLocationAPI.

Это хороший учебник для использования FusedLocationApi: Android Location API

+0

Его не устарели. – j4rey89

+0

Может быть, но официальное руководство по Android предлагает использовать FusedLocationApi для операций, связанных с местоположением. У меня тоже возникли проблемы (получение нулевых значений) из старого LocationListener. Хотя проблема была решена после использования нового API. –

+0

FusedLocationApi более точный, больше разряжает батарею. LocationListener менее точен, и он прыгает (например, он покажет вам в какой-то момент, затем в следующую секунду вы находитесь в другой точке), истощает меньше батареи, поэтому LocationListener полезен, если вам нужна приблизительная оценка местоположения. У меня не было проблем с использованием LocationListener. – j4rey89

0

Вы должны переместить устройство для вызова onLocationChanged из LocationListener в LocationListener используется для получения уведомлений от LocationManager, когда местоположение изменилось. Эти методы вызывают, если LocationListener был зарегистрирован в службе менеджера местоположений с использованием метода LocationManager.requestLocationUpdates(String, long, float, LocationListener).

Теперь нет никакой гарантии, что getLastKnownLocation всегда возвращают Location как он возвращает последнее место, но если приложение установлено недавно или пользователь сделал четкие данные, то GPS последнего известного местоположения возвращает null так справиться с этим следует переместить устройство таким образом, что onLocationChanged является (я рекомендую двигаться в открытом состоянии, чтобы устройство быстро подключалось к gps).

ИЛИ

Вы можете использовать FusedLocationProviderApi как это последний API и лучший из имеющихся возможностей, чтобы получить местоположение в Android. google docs : Getting the Last Known Location

0

Вы проверили, включен ли ваш GNSS/GPS?

boolean gpsEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

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

  • Нет связанных вопросов^_^