Kullanıcının mevcut konumunu GPS veya internet kullanmadan almak mümkün müdür? Mobil ağ sağlayıcısının yardımıyla demek istiyorum.
Kullanıcının mevcut konumunu GPS veya internet kullanmadan almak mümkün müdür? Mobil ağ sağlayıcısının yardımıyla demek istiyorum.
Yanıtlar:
Yapmak istediğiniz şey LocationManager.NETWORK_PROVIDER
yerine kullanarak pozisyon almaktır LocationManager.GPS_PROVIDER
. Mevcut NETWORK_PROVIDER
olan GSM veya wifi üzerinde çözülür. Açıkçası, wifi kapalıyken, GSM kullanılacaktır. Hücre ağını kullanmanın temelde 500m kadar doğru olduğunu unutmayın.
http://developer.android.com/guide/topics/location/obtaining-user-location.html gerçekten harika bilgiler ve örnek kodlar içerir.
Kodun çoğunu tamamladıktan OnCreate()
sonra şunu ekleyin:
// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// Called when a new location is found by the network location provider.
makeUseOfNewLocation(location);
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
Ayrıca aktivitenizin LocationListener
sınıfı uygulamasını ve böylece aktivitenize uygulamasını da sağlayabilirsiniz onLocationChanged()
.
Bunu elde ederek getLastKnownLocation
aslında bir düzeltmeyi kendiniz başlatmazsınız.
Bunun olabileceğinin farkında olun sağlayıcı başlatmak, ancak kullanıcının daha önce bir konum aldı, Size onun sanmıyorum. Dokümanlar bu konuda pek net değil.
Dokümanlara göre getLastKnownLocation:
Verilen sağlayıcıdan elde edilen son bilinen konum düzeltmesinden verileri gösteren bir Konum döndürür. Bu, sağlayıcıyı başlatmadan yapılabilir.
İşte hızlı bir pasaj:
import android.content.Context;
import android.location.Location;
import android.location.LocationManager;
import java.util.List;
public class UtilLocation {
public static Location getLastKnownLoaction(boolean enabledProvidersOnly, Context context){
LocationManager manager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
Location utilLocation = null;
List<String> providers = manager.getProviders(enabledProvidersOnly);
for(String provider : providers){
utilLocation = manager.getLastKnownLocation(provider);
if(utilLocation != null) return utilLocation;
}
return null;
}
}
Ayrıca şuna yeni izin eklemelisiniz AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
PASSIVE_PROVIDER
, NETWORK_PROVIDER
ve GPS_PROVIDER
.
boolean gps_enabled = false;
boolean network_enabled = false;
LocationManager lm = (LocationManager) mCtx
.getSystemService(Context.LOCATION_SERVICE);
gps_enabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
network_enabled = lm.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
Location net_loc = null, gps_loc = null, finalLoc = null;
if (gps_enabled)
gps_loc = lm.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (network_enabled)
net_loc = lm.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (gps_loc != null && net_loc != null) {
//smaller the number more accurate result will
if (gps_loc.getAccuracy() > net_loc.getAccuracy())
finalLoc = net_loc;
else
finalLoc = gps_loc;
// I used this just to get an idea (if both avail, its upto you which you want to take as I've taken location with more accuracy)
} else {
if (gps_loc != null) {
finalLoc = gps_loc;
} else if (net_loc != null) {
finalLoc = net_loc;
}
}
Hayır, GPS veya internet kullanmadan şu anda konum bilgisi alamazsınız.
WiFi, Hücresel veya Bluetooth'a dayalı konum teknikleri, sürekli güncellenen büyük bir veritabanı yardımıyla çalışır. Bir cihaz, verici kimliklerini tarar ve ardından bunları internet üzerinden bir sorguda Google, Apple veya Skyhook gibi bir hizmete gönderir . Bu hizmet, bilinen konumlardan önceki kablosuz anketlere dayalı bir konumla yanıt verir. İnternet erişimi olmadan, böyle bir veritabanının yerel bir kopyasına sahip olmanız ve bunu güncel tutmanız gerekir. Küresel kullanım için bu çok pratik değildir.
Teorik olarak, bir mobil sağlayıcı yalnızca yerel veri hizmeti sağlayabilir ancak internete erişim sağlayamaz ve ardından mobil cihazlardan konum sorgularını yanıtlayabilir. Mobil sağlayıcılar bunu yapmaz; hiç kimse bu tür kısıtlı veri erişimi için ödeme yapmak istemez. Mobil sağlayıcınız aracılığıyla veri hizmeti alıyorsanız, internet erişiminiz vardır.
Kısacası, konumu almak için LocationManager.NETWORK_PROVIDER veya android.hardware.location.network kullanmak internet kullanımını gerektirir.
Bilinen son konumu kullanmak, çok yakın zamanda GPS veya internet erişiminizin olmasını gerektirir. Yeni internetiniz varsa, muhtemelen tekrar internete girmek için konumunuzu veya ayarlarınızı değiştirebilirsiniz. Cihazınızın GPS veya internet erişimi yoksa, bilinen son konum özelliği size yardımcı olmayacaktır.
GPS veya internet olmadan şunları yapabilirsiniz:
Burada GPS ve Ağ Sağlayıcısı kullanılmadan Kullanıcının mevcut konumunu elde etmek mümkündür.
1. Convert cellLocation to real location (Latitude and Longitude), using "http://www.google.com/glm/mmap"
Google Haritalar Coğrafi Konum API'sine bir göz attınız mı? Google Map Geolocation
Bu basit RestApi, sadece POST'a ihtiyacınız var, servis metre cinsinden doğrulukla bir konum döndürecektir.
GPS kullanmadan bir akıllı telefonu takip etmenin mümkün olduğu anlaşılıyor.
Kaynaklar:
Birincil: "PinMe: Dünya Çapında Akıllı Telefon Kullanıcısını İzleme"
İkincil: "GPS veya Onay Olmadan Cep Telefonu Nasıl İzlenir?"
Takımın son koduna henüz bir bağlantı bulamadım. Bunu yaptığımda, başka biri yapmadıysa göndereceğim.