Soru & Cevap

LocationManager Network Provider

12.02.2014 - 02:42

 Network durumunu aşağıdaki kodla kontrol ediyorum ancak network kapalı dahi olsa true değeri döndürüyor hem mobil veri hem wireless kapalı olduğu halde true değerine anlam veremedim yardımcı olursanız çok sevinirim saygılarımla

~~isNetworkEnabled = locationManager
                    .isProviderEnabled(LocationManager.NETWORK_PROVIDER);
 

45 Görüntülenme

3 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-10362-1393062745.jpg
BYTUNCAY
13.02.2014 - 05:51

[code]

~public class GPSTracker extends Service implements LocationListener {

 private final Context mContext;

 
 boolean isGPSEnabled = false;

 boolean isNetworkEnabled = false;

 
 boolean canGetLocation = false;

 Location location;
 double latitude;
 double longitude;

 
 private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 0;


 private static final long MIN_TIME_BW_UPDATES = 1000 * 1 * 1;

 
 protected LocationManager locationManager;

 public GPSTracker(Context context) {
  this.mContext = context;
  
  getLocation();
 }

 public Location getLocation() {
  try {
   locationManager = (LocationManager) mContext
     .getSystemService(LOCATION_SERVICE);

   
   isGPSEnabled = locationManager
     .isProviderEnabled(LocationManager.GPS_PROVIDER);

   
   isNetworkEnabled = locationManager
     .isProviderEnabled(LocationManager.NETWORK_PROVIDER);

   if (!isGPSEnabled && !isNetworkEnabled) {
    
   } else {
    this.canGetLocation = true;
    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();
      }
     }
    }
    
    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();
       }
      }
     }
    }
   }

  } catch (Exception e) {
   e.printStackTrace();
  }

  return location;
 }
 
 
 public void stopUsingGPS(){
  if(locationManager != null){
   locationManager.removeUpdates(GPSTracker.this);
  }  
 }
 
 
 public double getLatitude(){
  if(location != null){
   latitude = location.getLatitude();
  }
  
  
  return latitude;
 }
 
 
 public double getLongitude(){
  if(location != null){
   longitude = location.getLongitude();
  }
  
 
  return longitude;
 }
 

 public boolean canGetLocation() {
  return this.canGetLocation;
 }
 
 
 
 @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;
 }

}

[/code]

Caner Güral
13.02.2014 - 06:09
"isNetworkEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER);" kısmında bir sorun yok. Aynı sınıfı kullanarak yaptığım bir örnekte konum servisleri kapalıysa false, açıksa true sonuç döndürebiliyorum.
Duran ÜN
13.02.2014 - 06:23
Bende kesinlikle dönmüyor aynı sınıfla acaba android sürümü kaynaklı olabilirmi sürümünüz nedir ben 4.3 note 2 de test ediyorum
Caner Güral
13.02.2014 - 09:15
isProviderEnabled için bir API kısıtlaması yazmıyor dökümantasyonda. Cihaz ayarlarıyla alakalı duruyor. Ben Sony Xperia Z1'de ve Turkcell T30'da denedim.
Caner Güral
14.02.2014 - 10:24
Bugün Note 2 ile de denedim. Konum servisleri ayarlarından "kablosuz ağları kullan"ı kapatınca false döndürebiliyorum. https://gist.github.com/caner/8997547
Duran ÜN
14.02.2014 - 11:55
Android surumu 4.3 bende belki ondan kaynaklanniyordur surum degistirip deniyxem tsk. Ederim ilginiz icin
Caner Güral
14.02.2014 - 12:12
Bendeki T30 4.0.3, Note 2 ve Xperia Z1 ise 4.3 sürüm Android kullanıyordu.
picture-3606-1408610132.jpg
cgural
13.02.2014 - 04:07

Burada kullanılacak sınıf kısmında bir karışıklık var gibi: Ağ bağlanabilirlik durumunu LocationManager ile değil de ConnectivityManager ile sorgularsınız. Bu metodun true döndürmesi normal, çünkü varsayılan ayarlardayken cihazı uçak moduna almadıkça konum bilgisini ağ aygıtlarından (Wifi veya mobil/operatör ağ) alabilirsiniz. Bkz: LocationManager#NETWORK_PROVIDER

Sizin ihtiyacınız şu sorudakine benziyor sanırım: İnternet bağlantısı Android'te nasıl kontrol edilir?

 

Duran ÜN
13.02.2014 - 04:18
Yalnız ben Network_Provider true false değerini almaya çalışıyorum bir harita uygulaması yapıyorum.
Caner Güral
13.02.2014 - 04:31
Siz "Network durumu" deyince ben de öyle sandım. Cihazınızın yer servisleri vs. ayarı ne durumda? Onları kapattığınızda size NETWORK_PROVIDER için false dönmeli.
Duran ÜN
13.02.2014 - 05:31
konum servislerini kapattığım halde durum true dönüyor sıkıntı orada zaten
Caner Güral
13.02.2014 - 05:44
Keşke bu detaylara sorunuzda da değinseydiniz. Kodunuzda isNetworkEnabled değişkeni bir daha değişiyor mu? Belki değişmeyeceğini garanti altına almak için final yapmak yardımcı olabilir.
Duran ÜN
13.02.2014 - 05:49
İsterseniz Kod Bloğunu Olduğu Gbi Paylaşayım ?
picture-10362-1393062745.jpg
BYTUNCAY
13.02.2014 - 03:19

Sanırım bu konuda bilgi sahibi yok. Yada kimse yardım etmek istemiyor :(